为啥这个简单的自动布局在 IB 中崩溃了?
Posted
技术标签:
【中文标题】为啥这个简单的自动布局在 IB 中崩溃了?【英文标题】:Why does this simple autolayout collapse in IB?为什么这个简单的自动布局在 IB 中崩溃了? 【发布时间】:2021-03-20 13:55:01 【问题描述】:我有一个带有滚动视图中的文本视图和两个按钮的窗口。我在各个方面都添加了约束,前导、尾随、顶部和底部。对于按钮,我有固定的宽度和高度,以及到底部和边缘的距离。
我希望它看起来像这样:
这就是 Interface Builder 不断给我的:
它还不断提供通过添加缺少的约束来修复歧义,但实际上单击按钮没有任何效果。不添加任何约束。错误(以及修复它的提议)仍然存在。
我已经尝试添加它要求的约束,尽管我不明白为什么需要它们,并且至少按钮已经具有(固定的)宽度约束。但是我不断收到错误,并且窗口不断缩小。
实际运行程序时,窗口看起来不错。但我怀疑这些自动布局错误与这个问题有关:NSTextView in magnified NSScrollView breaks on resize
项目在这里:https://github.com/angstsmurf/spatterlight/tree/helpviewtest
(分支 helpviewtest 是专门为这个问题创建的缩减测试用例。)
【问题讨论】:
【参考方案1】:您有一个嵌入在滚动视图中的剪辑视图中嵌入的文本视图,它们都没有固有内容大小。
IB 不知道运行时会发生什么。
因此,尽管运行此程序时一切看起来都很棒,但您的代码将提供足够的信息来根据需要进行布局。
要让它在 IB 中“看起来正确”(并避免错误/警告),您可以给 ScrollView 一个 Placeholder 内在内容大小:
【讨论】:
谢谢!似乎从库中添加的 NSScrollView 有一个默认的内在大小,在这里丢失了,可能是当我将它更改为子类然后再次返回 NSScrollView 时。以上是关于为啥这个简单的自动布局在 IB 中崩溃了?的主要内容,如果未能解决你的问题,请参考以下文章
为啥我会在不应为 size 类安装的约束上收到自动布局错误?
为啥关闭 translatesAutoResizingMasks 会导致自动布局崩溃,抱怨我需要调用 [super layoutSubviews]?