【问题标题】:ScrollView is missing constraintsScrollView 缺少约束
【发布时间】:2021-06-13 15:54:45
【问题描述】:

Swift 5/Xcode 12.4

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

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

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

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

为什么 ScrollView 仍然缺少约束,我该如何修复它(不改变这个 ViewController 的整体布局)?

【问题讨论】:

    标签: ios xcode uiscrollview uiimageview nslayoutconstraint


    【解决方案1】:

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

    如果您打算通过代码设置其宽度和高度约束,但又想摆脱 IB 布局问题,请为图像视图添加一个占位符


    编辑

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

    将约束连接到@IBOutlet 并通过代码更改.constant(如果需要,更改乘数会更成问题,因此可能不是可行的方法)...

    或者……

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

    【讨论】:

    • 有趣...我从未接触过Intrinsic Content Size,在“尺寸检查器”中它仍然设置为Default (System Defined)。将其设置为 320x78 确实消除了警告,谢谢!有没有办法让占位符始终填充其周围父级的整个宽度,所以无论您在 XIB 中使用 iPhone 还是 iPad,它看起来都一样?
    • 不,我不会在运行时更改代码中的约束。我将它们设置在 XIB 中,也不使用任何固定尺寸,因此布局适用于 iPhone 和 iPad。我在运行时唯一要做的就是将图像分配给UIImageView 并更改 ScrollView 的缩放比例。在运行时,这些约束(例如 ScrollView 的 1:1 纵横比)应该仍然相同。
    • @Neph - 如果您在使用 Storyboard 时仍然无法解决这个问题,请查看此示例项目:github.com/DonMag/EmulateMapMarkers
    • 感谢示例项目!这个问题是关于纯粹在 XIB 中设置约束,不涉及任何代码(并使 XIB 中的 VC 看起来就像在真实应用程序中一样),所以请看我未来对另一个问题的回复。我测试了几件事:如果我将 ImageView 的中心 x/y 与Content Layout Guide 对齐,即使没有占位符设置,警告也会消失。不知道为什么会修复它,因为错误是针对 ScrollView,而不是 ImageView。 ScrollView 是否必须完全填充(从上到下,导致尾随)才能“快乐”?
    猜你喜欢
    • 2018-12-12
    • 2019-12-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2017-04-17
    • 2018-09-01
    • 1970-01-01
    相关资源
    最近更新 更多