我试图在显示之前调整NSPopover的大小,方法是使用以下方法设置它包含的NSView的框架:
setFrameSize:
然而,当我尝试通过调用
来显示popover时showRelativeToRect: ofView: preferredEdge:
视图返回其先前的大小。为什么会这样?还有另一种方法我应该调整popover吗?
提前致谢,Ben。
答案 0 :(得分:1)
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;
答案 1 :(得分:0)
您应该在弹出框所包含的NSViewController中实现-preferredContentSize。这似乎是控制弹出窗口大小的最可靠方法。