【发布时间】:2016-03-20 08:15:49
【问题描述】:
我查看了其他类似的问题,但没有一个解决真正以编程方式绕过自动布局以获取 NSView 的子视图的问题。
我需要告诉自动布局不要布局特定NSView 的子视图。我试过覆盖layout(),但这只会生成一个警告,并且没有约束的子视图(我已经在它上面设置了translatesAutoresizingMaskIntoConstraints = false,因为我不希望自动生成任何约束或以其他方式)得到无论如何,它的框架设置为全零[x=0, y=0, width=0, height=0]。我很难相信没有办法告诉 Auto Layout 不要布局视图。 translatesAutoresizingMaskIntoConstraints = true 不是我想要的,因为我想为视图的所有子视图完全禁用自动布局。我有两种情况需要这个:
- 一个笔记应用程序,用户可以在其中创建和定位基本几何形状和文本视图。这些都是
NSView子类。我当然可以使用约束并对其进行操作,但是不应该以任何方式自适应的视图有什么意义呢? - 一个数学应用程序,我使用自动布局将数学布局在不同的行上。我想暂时关闭未编辑的行的自动布局,因为当您添加更多行和数学对象时,自动布局计算开始使应用程序逐渐变得更加无响应。由于唯一需要布局计算的是用户正在编辑的行,因此可以通过关闭其他行的自动布局来优化该过程。
【问题讨论】:
-
您为笔记应用描述描述的方法不是最佳的。撇开文本视图不谈,这类应用程序通常只有一个
NSView视图(画布)。几何形状只是贝塞尔路径(NSBezierPath实例),在用户拖动它们时会重复重绘。如果您想了解这是如何完成的,请查看 Apple 的 Sketch 演示应用程序(它还向您展示了如何创建可以在画布内移动的文本)。 -
谢谢保罗。我看过 Sketch 演示,也考虑过这种方法,但出于各种原因,我决定采用 NSView-per-object 方法。与几乎所有事情一样,每个决定都有利弊。
标签: macos cocoa autolayout