ScrollView 缺少约束

问题描述

Swift 5/Xcode 12.4

我的应用程序使用 UIScrollView 来缩放其子 UIImageView(通过代码填充)。这部分有效,但 ScrollView 在 XIB 中一直抱怨它缺少 x/y 位置或宽度/高度的约束。

enter image description here

如您所见,ScrollView 具有顶部、前导和尾部约束,并且宽度设置为等于高度。根据我的理解,由于这些限制,它知道它的尺寸和位置,但显然这还不够。我不想让 ScrollView 垂直居中,而且由于应用程序必须同时支持 iPhone 和 iPad,我也不能只为 ScrollView 设置一个固定的“底部空间”约束。

我已经尝试将 ScrollView 的宽度设置为 ChildView 的宽度并将其水平居中,但警告仍然没有消失。

我已经看到将 ScrollView 的内容放在另一个 UIView 中的建议,但在我的情况下,它只是一个图像,如果我将其嵌入到视图中,则缩放会中断。

为什么 ScrollView 仍然缺少约束以及如何修复它(不更改此 ViewController 的整体布局)?

解决方法

UIImageView(没有图像)没有 Intrinsic Content Size

如果你打算通过代码设置它的宽度和高度约束,但你想摆脱 IB 布局的抱怨,给图像视图一个 Placeholder

enter image description here


编辑

如果您希望在 IB 中调整视图的大小,但要在运行时更改约束,您可以:

将约束连接到 @IBOutlet 并通过代码更改 .constant(如果需要更改乘数更有问题,所以可能不是要走的路)...

或者...

在 IB 中给出视图约束,但通过选中“在构建时删除”将它们设置为占位符:

enter image description here