从 OSX 10.7 开始,如果您希望执行 NSView 的手动布局,您应该通过覆盖该layout
方法来实现,并且每当您希望安排对该方法的调用时,您只需执行以下操作:
[myView setNeedsLayout:YES]
我对 iOS 中的这种模式非常熟悉,但是在 OSX 上它似乎不起作用。我创建了一个自定义的 NSView 并实现layout
了,但它似乎永远不会被调用。曾经。不是在添加子视图之后,不是在调用之后setNeedsLayout:YES
,从来没有,我不知道为什么。我可以手动调用layout
并且事情按预期工作,但文档说永远不要这样做。
来自 Xcode:
- (void)layout
Override this method if your custom view needs to perform custom
layout not expressible using the constraint-based layout system. In
this case you are responsible for calling setNeedsLayout: when
something that impacts your custom layout changes.
来自在线文档:
仅当您想进行自定义布局时才应覆盖布局。如果你这样做了,那么你还需要调用 setNeedsLayout: 当你的自定义布局中的某些东西发生变化时。
任何帮助深表感谢。
更新: 这是一个示例 Xcode 项目的链接,该项目说明了LayoutTest.zip问题