NSPopover填充内容一方面

时间:2013-05-14 16:22:12

标签: objective-c macos cocoa menubar nspopover

我有两个NSPopover,两者都设置完全相同(只是从IB链接自定义NSView)。两者都弹出正常,但似乎可以将内容偏移约20px。

此NSPopover(正确)未填充内容...

no padding

但是这个增加了大约20px的骑行。

padding

以下是IB

中提出的两种观点

enter image description here

正如您所看到的,搜索栏应该固定在右侧,就像左侧一样,但由于某种原因,它不是。起初我认为这是一个约束问题,但在搞了一段时间之后,我可以确认它不是。

有什么线索吗?

编辑:决定继承视图并填充其矩形,得到一些非常奇怪的结果!视图似乎被抵消了。我不知道为什么会这样......

enter image description here enter image description here

3 个答案:

答案 0 :(得分:2)

来自here,这引起了我的注意(强调我的):

  

你不应该打电话的主要情况   setTranslatesAutoresizingMaskIntoConstraints:就是你不是的时候   指定视图与其容器的关系的人。例如,   NSTableRowView实例由NSTableView放置。它可能会这样做   通过允许自动调整掩码转换为约束,   或者它可能不会。这是一个私有的实现细节。其他观点   你不应该打电话   setTranslatesAutoresizingMaskIntoConstraints:包含一个   NSTableCellViewNSSplitView的子视图,NSTabViewItem的视图,或    NSPopover NSWindowNSBox的内容视图。对于那些   熟悉经典的Cocoa布局:如果你不打电话   setAutoresizingMask:在经典风格的视图中,你不应该打电话   自动布局下的setTranslatesAutoresizingMaskIntoConstraints:

它适用于你吗?

答案 1 :(得分:0)

如果您有内容视图的插座,您应该可以使用以下方式强行插入:

[contentView setFrame:[[contentView superview]bounds]];

或更现代,我猜...

contentView.frame = contentView.superview.bounds;

答案 2 :(得分:-1)

Proplem解决了,但我仍然不知道为什么需要解决。 NSPopovers内容视图(或至少我的)需要X:13,Y:13的原点。出于某种原因,我的观点中只有一个获得此值。

为了解决这个问题,我将NSView子类化并覆盖了setFrame方法,强制其x和y始终为13,13

-(void)setFrame:(NSRect)frameRect {
    [super setFrame:NSMakeRect(13, 13, frameRect.size.width, frameRect.size.height)];
}