为啥这个简单的自动布局在 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]?

为啥自动布局约束不起作用?

iOS 自动布局:这可以用 IB 完成吗?

4英寸屏幕上的自动布局

iOS 7 自动布局 - UIScrollView 内的 UIImageView