我试图通过使用以下方法设置它包含的NSView的框架来显示它之前调整NSPopover的大小:
setFrameSize:
但是,当我尝试通过调用以下方式显示popover时:
showRelativeToRect: ofView: preferredEdge:
视图返回其先前的大小。为什么会这样?还有另一种方法我应该调整popover吗?
提前谢谢,本。
popover上有一个setContentSize,但我觉得这个效果并不好。我的意思是它有效,但调整内容的大小(包括子视图)。因此,更好的方法是创建一个新的NSViewController并为其分配新视图。在NSPopover上设置此新控制器时,会正确地遵循该大小,如果当前显示弹出框,则它将设置为新视图的动画。
如果您不能这样做,而是想要调整内容的大小,请使用以下内容:
NSRect frame = valuePopupList.frame;
frame.origin = NSMakePoint(2, 2);
... determine new frame ...
NSSize contentSize = frame.size;
contentSize.width += 4; // Border left/right.
contentSize.height += 4; // Ditto for top/bottom.
if (contentSize.height < 26) {
contentSize.height = 26;
}
valuePopupList.frame = frame;
statementsPopover.contentSize = contentSize;
[statementsPopover showRelativeToRect: area ofView: view preferredEdge: NSMaxXEdge];
valuePopupList.frameOrigin = frame.origin;
您应该在弹出窗口包含的NSViewController中实现-preferredContentSize。这似乎是控制popover大小最可靠的方法。