【问题标题】:Changing Popover view frame on fly即时更改 Popover 视图框架
【发布时间】:2012-05-16 18:43:49
【问题描述】:
当弹出框显示时,如何根据条件检查使其大小可变?使用弹出框时是否支持此功能?
这是我更改帧大小的示例:
CGFloat newHeight = 200;
NSRect newFrame = [parentView frame];
newFrame.size.height = newHeight;
NSView* childView = someView;
[parentView setFrame:newFrame];
[self.view addSubview:childView];
【问题讨论】:
标签:
objective-c
cocoa
osx-lion
popover
【解决方案1】:
您需要将NSPopover 的popupwindow.contentViewController 属性更改为具有不同大小视图的新NSViewController。
也就是说,调整视图框架的大小只会导致奇怪的绘图问题。要使弹出窗口更改大小,必须更改 contentViewController。
理想情况下,您应该设置一个新的视图控制器,它本质上是您现有NSViewController 的副本,但包含一个更高/更短的视图。但在最坏的情况下,您可以这样做:
gPopoverWindow.contentViewController = [[[NSViewController alloc] initWithNibName: @"tempNibName" bundle: nil] autorelease];
NSView *v = self.view;
NSRect b = [v frame];
b.size.height += 25;
[v setFrame: b];
gPopoverWindow.contentViewController = self;
在我的测试中,这导致弹出框开始收缩动画(因为被设置为临时视图控制器),然后增长到新的大小。
【解决方案2】:
不知道是否有任何更改,但在 10.9 中,您所要做的就是在弹出框上设置内容大小,例如:
[popoverView setFrame:NSMakeRect(0, 0, 581, 581)];
[thePopover setContentSize:popoverView.frame.size];