gpt4 book ai didi

macos - 如何以编程方式关闭 NSView subview 的 Cocoa 自动布局?

转载 作者:行者123 更新时间:2023-12-03 17:01:51 28 4
gpt4 key购买 nike

我查看了其他类似的问题,但没有一个解决了真正以编程方式绕过 NSView subview 的自动布局的问题。

我需要告诉自动布局不要布局特定NSView的 subview 。我尝试覆盖 layout(),但这只会生成一个警告,并且 subview 对其没有约束(我已经在其上设置了 translatesAutoresizingMaskIntoConstraints = false ,因为我不希望自动生成任何约束,否则)无论如何都会将其帧设置为全零[x=0, y=0, width=0, height=0]。我很难相信没有办法告诉自动布局不布局 View 。 translatesAutoresizingMaskIntoConstraints = true 不是我想要的,因为我想完全禁用 View 的所有 subview 的自动布局。我有两种情况需要这个:

  1. 一款笔记应用,用户可以在其中创建和定位基本几何形状和 TextView 。这些都是 NSView 子类。我当然可以使用约束并操纵它们,但是不应该以任何方式进行自适应的 View 有什么意义呢?
  2. 一个数学应用程序,我使用自动布局将数学布局在单独的行上。我想暂时关闭未编辑的行的自动布局,因为当您添加更多行和数学对象时,自动布局计算开始使应用程序逐渐变得更加无响应。由于唯一需要布局计算的是用户正在编辑的行,因此可以通过关闭其他行的自动布局来优化该过程。

最佳答案

没有办法做你想做的事。

自动布局针对整个窗口而不是单个 View 打开或关闭。如果窗口中的任何 View 已添加约束或者属于 +requiresConstraintBasedLayout 方法返回 true 的类,则窗口将使用自动布局。

如果您想使用旧的方式定位 View ,通过设置其框架及其自动调整大小蒙版,那么您希望 translatesAutoresizingMaskIntoConstraints 为 true。事实上,这是以编程方式创建的 View 的默认设置,正是为了向后兼容不知道自动布局的代码,以便在否则使用自动布局的窗口中运行。你关闭它的理由完全是相反的。

只需保留或打开 translatesAutoresizingMaskIntoConstraints 即可让您的代码负责将 View 的框架设置为所需的任何内容。请务必根据需要设置 View 的 autoresizingMask,也许设置为 NSViewNotSizing。您通常需要在持续时间内停用 View 上的任何其他约束。

如果您需要对整个 View 子层次结构执行此操作,那么您必须这样做 - 启用 translatesAutoresizingMaskIntoConstraints 并设置框架和 autoresizingMask - 用于整个子层次结构。然而,这对我来说似乎不是一个合理的方法。

关于macos - 如何以编程方式关闭 NSView subview 的 Cocoa 自动布局?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36111576/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com