我有两个NSPopover,两者都设置完全相同(只是从IB链接自定义NSView)。两者都弹出正常,但似乎可以将内容偏移约20px。
此NSPopover(正确)未填充内容...
但是这个增加了大约20px的骑行。
以下是IB
中提出的两种观点
正如您所看到的,搜索栏应该固定在右侧,就像左侧一样,但由于某种原因,它不是。起初我认为这是一个约束问题,但在搞了一段时间之后,我可以确认它不是。
有什么线索吗?
编辑:决定继承视图并填充其矩形,得到一些非常奇怪的结果!视图似乎被抵消了。我不知道为什么会这样......
答案 0 :(得分:2)
来自here,这引起了我的注意(强调我的):
你不应该打电话的主要情况
setTranslatesAutoresizingMaskIntoConstraints:
就是你不是的时候 指定视图与其容器的关系的人。例如,NSTableRowView
实例由NSTableView
放置。它可能会这样做 通过允许自动调整掩码转换为约束, 或者它可能不会。这是一个私有的实现细节。其他观点 你不应该打电话setTranslatesAutoresizingMaskIntoConstraints:
包含一个NSTableCellView
,NSSplitView
的子视图,NSTabViewItem的视图,或NSPopover
,NSWindow
或NSBox
的内容视图。对于那些 熟悉经典的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)];
}