8

I have an NSPopover who's content in an NSView. I create the popover and add the view like this:

NSPopover *thePopover = [[NSPopover alloc] init];
[thePopover setContentViewController:myViewController];

I then show the popover and set the size:

[thePopover setContentSize:NSMakeSize(300.0f, 160.0f)];

At this point the popover is visible and its content view is correct. Is there a way that I can resize the popover at this point without closing and re-showing it?

Chris
  • 1,005
  • 1
  • 13
  • 27

3 Answers3

11

I was able to achieve this by calling back to the controller that launched the popover via a delegate protocol and resetting the size using the setContentSize:

Chris
  • 1,005
  • 1
  • 13
  • 27
3

NSWindow has private property _popover that store a reference to NSPopover. You can use it to access to NSPopover instance from any NSViewController (and then call setContentSize: on it) like this:

- (NSPopover *)popover
{
    NSWindow *window = self.view.window;
    NSPopover *popover = [window valueForKey:@"_popover"];
    return popover;
}
Valentin Shergin
  • 7,166
  • 2
  • 50
  • 53
2

From the documentation:

The popover's content size is set to match the size of the content view when the content view controller is set.

So, set the frame of the popover's content view.

Peter Hosey
  • 95,783
  • 15
  • 211
  • 370