iOS Storyboard 约束未按预期运行

Posted

技术标签:

【中文标题】iOS Storyboard 约束未按预期运行【英文标题】:iOS Storyboard Constraints Not Operating As Expected 【发布时间】:2017-10-06 20:59:01 【问题描述】:

我正在尝试在我的故事板中修复这些限制。我目前有一个容器视图,它有一些完美的约束和定位。它根据屏幕大小等调整大小。效果很好。

链接到该容器视图的视图控制器当前设置为 Freeform,宽度为 306,高度为 315。在该视图控制器内部,我有一个具有以下约束的滚动视图。

所以它应该占据整个视图控制器。在该滚动视图内部,我有很多元素、按钮、文本字段、标签等。例如,我有一个固定在视图顶部的文本字段(顶部空间到 Superview 0)。我还将超级视图的尾随和前导空间设置为 0。

如果我将视图控制器从 Freeform 更改为 Fixed 我希望滚动视图会更改大小(它确实如此),并且我希望它将该文本字段的宽度设置为与滚动视图和视图(它没有)。它保持 306 的宽度。即使它设置为尾随和前导空间,超级视图也设置为 0。

这会在 iPhone 4S 等设备中产生问题。我希望此视图的元素在宽度方面缩小以适合该容器视图。但它只允许水平滚动。

我想允许垂直滚动,因为它是一个表单并且有很多表单元素等。因此,对于较小的设备,它们应该能够向下滚动以查看所有元素。但我希望元素缩小或调整宽度以适应更小的设备。

关于如何实现这一点的任何想法?

【问题讨论】:

滚动视图的 contentSize 由应用于其内容的约束设置。因此,如果您希望滚动视图的 content 根据视图大小而改变 - 而不是它可以滚动的量和方向 - 您必须设置约束和/或重新定位 内容元素来做到这一点。 @DonMag 我不确定我是否理解。在文本字段上我有trailing and leading space to superview set to 0。您能否提供有关如何解决此问题的更多详细信息?我必须添加或更改哪些约束才能使其正常工作?因为我很确定trailing and leading space to superview set to 0 应该可以工作,但我根本不明白。 文本字段和其他视图不是UIScrollView 的直接子级,并且不受其大小的控制。它们是位于滚动视图内部和“下方”的内容视图的子视图。它们的约束是相对于该内容视图设置的,如果您希望它们重新布局,您将不得不更改 contentView。您还必须更改滚动视图的 contentSize 以匹配新内容视图的边界。 【参考方案1】:

假设你的布局看起来像这样:

较小的浅蓝色 ViewController 的 ScrollView 一直固定为零。

左上角标签固定在前导:0 和顶部:0

右下标签固定在 Trailing: 0 和 Bottom: 0

所有 4 个约束都与 SuperView 相关 - 即 ScrollView。

您还需要右下角标签的 Y 位置约束 - 在这种情况下,我将它从左上角标签设置为 435“垂直间距”。

此时,一切都按照您现在看到的方式进行。我在 Storyboard 中为 7+ 设置了它......如果我在 7+ 上运行它,它完全适合“开放”。但是...如果我在 5 秒内运行它,右下角标签位于右侧,我们会得到水平滚动。

要解决这个问题,您需要将 另一个 尾随约束添加到右下标签,但使其与持有 ScrollView 的 View 相关。

因此,选择右下角标签后,您应该会看到:

【讨论】:

我应该补充一下...这似乎是一个尴尬的结构。如果你想在“容器视图”区域中滚动内容,我认为如果你在那里只有一个滚动视图而不是容器视图,那么管理起来会更容易。 完美!!看起来像添加尾随空间来查看工作!谢谢您的帮助。我做这个容器视图的原因是因为我在滚动视图的下方和上方都有元素。这是目前最简单的方法。我通常不会问这个问题,但我最近在布局和故事板方面遇到了很多问题。仍然对其中一些感到困惑。如果您想看一下我的另一个问题,该问题非常相似,但观点不同,将不胜感激哈哈。 ***.com/questions/43835290/…

以上是关于iOS Storyboard 约束未按预期运行的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 未按预期显示约束

UI 滚动视图未按预期滚动

未按预期应用约束

程序约束未按预期工作

自动布局约束未按预期工作

Cordova iOS - inAppBrowser 未按预期工作