2

我有两个 NSPopover,它们的设置完全相同(只是从 IB 链接自定义 NSView)。两者都弹出很好,但一个似乎将内容偏移了大约 20 像素。

这个 NSPopover (正确地)没有填充内容......

没有填充

但这一个从骑行侧增加了大约 20 像素。

填充

这是IB中列出的两个视图

在此处输入图像描述

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

有什么线索吗?

编辑:决定子类化视图并填充它的矩形,得到了一些非常奇怪的结果!视图似乎是偏移的。我不知道这是为什么...

在此处输入图像描述 在此处输入图像描述

4

3 回答 3

2

这里,这引起了我的注意(强调我的):

您不应该调用的主要情况 setTranslatesAutoresizingMaskIntoConstraints:是您不是指定视图与其容器的关系的人。例如,一个NSTableRowView实例由 放置NSTableView。它可能通过允许将自动调整大小的掩码转换为约束来做到这一点,也可能不会。这是一个私有的实现细节。您不应调用的其他视图 setTranslatesAutoresizingMaskIntoConstraints:包括 NSTableCellView、 的子视图NSSplitView、NSTabViewItem 的视图或 、 或 的NSPopover内容NSWindow视图NSBox。对于那些熟悉经典 Cocoa 布局的人:如果您不会调用 setAutoresizingMask:经典样式的视图,则不应 setTranslatesAutoresizingMaskIntoConstraints:在 autolayout 下调用。

它适用于你吗?

于 2013-05-14T16:26:46.483 回答
0

如果您有内容视图的出口,您应该能够通过以下方式强制它到位:

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

或者更现代的我猜...

contentView.frame = contentView.superview.bounds;
于 2013-05-14T16:57:30.920 回答
-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)];
}
于 2013-05-14T17:09:49.497 回答