Macos 如何以编程方式关闭NSView子视图的Cocoa自动布局?
我已经研究了其他类似的问题,但没有一个解决了真正以编程方式绕过Macos 如何以编程方式关闭NSView子视图的Cocoa自动布局?,macos,cocoa,autolayout,Macos,Cocoa,Autolayout,我已经研究了其他类似的问题,但没有一个解决了真正以编程方式绕过NSView子视图的自动布局的问题 我需要告诉Auto Layout不要布局特定NSView的子视图。我已经尝试覆盖layout(),但这只会生成一个警告,并且对它没有任何约束的子视图(我已经在它上面设置了translatesAutoResizezingMaskintoConstraints=false,因为我不希望自动生成任何约束或其他)将其帧设置为所有零[x=0,y=0,width=0,height=0]。我发现很难相信没有办法告
NSView
子视图的自动布局的问题
我需要告诉Auto Layout不要布局特定NSView
的子视图。我已经尝试覆盖layout()
,但这只会生成一个警告,并且对它没有任何约束的子视图(我已经在它上面设置了translatesAutoResizezingMaskintoConstraints=false
,因为我不希望自动生成任何约束或其他)将其帧设置为所有零[x=0,y=0,width=0,height=0]
。我发现很难相信没有办法告诉自动布局不布局视图。translatesAutoResizezingMaskintoConstraints=true
不是我想要的,因为我想对视图的所有子视图完全禁用自动布局。我有两种情况需要这样做:
NSView
子类。我当然可以使用约束并操纵这些约束,但视图中不应该以任何方式自适应的点是什么没有办法做你想做的事 对于整个窗口,而不是单个视图,自动布局处于打开或关闭状态。如果窗口中的任何视图已添加约束或属于其
+requiresconsttraintbasedlayout
方法返回true的类,则窗口使用自动布局
如果您想使用旧的方式定位视图,通过设置其框架和自动调整大小掩码,那么您希望translatesAutoResizezingmaskintoConstraints
为真。事实上,这是编程创建视图的默认设置,正是为了向后兼容自动布局不知道的代码,以便在其他窗口中操作使用自动布局。你关闭它的理由是完全相反的
只需离开或打开translatesAutoResizengMaskintoConstraints
,让您的代码负责将视图的框架设置为所需的任何值。请确保也根据需要将视图的AutoResizengMask
设置为NSViewNotSizable
。通常需要停用任何其他约束持续时间内视图上的ts
如果您需要为整个视图子层次结构执行此操作,那么您必须执行此操作-启用
translatesAutoresizingMaskIntoConstraints
,并为整个子层次结构设置框架和autoresizingMask
。然而,这对我来说似乎不是一个合理的方法。谢谢Ken。这正是我所担心的。Au布局似乎不是一个友好的伙伴;o)我也尝试过使用“TranslatesAutoResizingMacSkintoConstraints=true”,但如果一个框架设置为负宽度或负高度,它会引发一个异常。我允许这样做,因为当用户可以通过拖动在任何方向绘制矩形时,它会使数学变得更容易。然后,我只是将框架标准化为a用户完成后。使用自动布局进行所有这些操作会让事情变得更加复杂,毫无原因。在数学应用程序中,我真的需要以某种方式优化自动布局过程。您描述的笔记应用程序描述方法不是最佳的。撇开文本视图不谈,这种应用程序通常只有一个NSV查看(画布)。这些几何图形只是贝塞尔路径(NSBezierPath
实例),用户拖动它们时,这些路径会重复绘制。如果您想了解如何实现这一点,请查看苹果的草图演示应用程序(它还向您展示了如何创建可以在画布中移动的文本)谢谢保罗。我已经看过了草图演示,也考虑了这个方法,但是由于各种各样的原因,在每个对象方法的NSVIEW上决定了。