具有自动布局的 iOS UIScrollView 未正确居中
Posted
技术标签:
【中文标题】具有自动布局的 iOS UIScrollView 未正确居中【英文标题】:iOS UIScrollView with autolayout not centering correctly 【发布时间】:2015-04-28 19:55:35 【问题描述】:在谷歌搜索并寻找解决方案后,我决定问一个问题。
我正在尝试设置一个 UIScrollView 并保留 AutoLayout。我整天都在研究这个问题,最后通过在其中放置一个子视图,然后在其中放置所有子视图,让 ScrollView 在 AutoLayout 中正常运行。
我将 Scroll View 中的约束在所有 4 个边上设置为 0,与 ContentView(ScrollView 的子视图)相同,然后将 ContentView 和 ScrollView 的父视图设置为相等的宽度。
然后我在 ContentView 中添加了 2 个标签,并将它们设置为水平居中,并添加了正确的约束以消除 ScrollView 的歧义。
标签垂直位于正确的位置,但在 iPhone 5s 上水平位于屏幕之外。
以下是限制条件:
这是预览中的样子:
但这是模拟器中的样子:
关于为什么会发生这种情况的任何想法?
提前致谢!
编辑 移除等宽约束后,视图终于出现了,但标签偏离了中心:
编辑 2 带有 UILabel 约束的情节提要的屏幕截图。
【问题讨论】:
在我看来,您的内容视图由于某种原因正在折叠为零宽度。作为提示,请尝试在您的视图中添加非白色背景颜色,以查看哪个行为不端。如果您已经将其四个边缘绑定到滚动视图,我认为您不需要将内容视图设置为与父视图具有相等的宽度 - 也许这会导致冲突。您是否收到任何情节提要约束警告? 嗨,阿里,感谢您的回复。我按照您的建议做了,并将 ContentView 的背景颜色更改为蓝色,果然没有蓝色。我删除了相等宽度的约束,除了标签被推到右侧(见上图)之外,一切似乎都在工作。 您可以在没有任何约束警告的情况下发生该约束冲突,这似乎很奇怪 - 您的故事板上是否有任何警告或错误可以向我们展示? 不,没有约束警告,控制台中也没有任何内容 =/. 可能不相关,但是 - 您有两个标签,但在预览和模拟器中只有一个可见。另一个应该在哪里?是第一下吗?我可以在标签上看到三个垂直约束——它们是如何垂直对齐的?你能告诉我们故事板视图吗? 【参考方案1】:好的。所以我认为我最初对等宽约束的评论让你误入歧途——这是阻止内容视图扩展和带走标签所必需的。
我仍然不确定为什么它会崩溃到零。
看看this SO question,它似乎涵盖了类似的问题。你的约束与他们的匹配吗?
编辑 - 实际上this answer 可能更清楚。
【讨论】:
好的,所以这种帮助,蓝色现在出现并且标签居中,但是滚动视图是水平滚动的,因为它必须比 iPhone 5s 的屏幕更宽,这是不是我想要的。我希望滚动视图在所有设备屏幕上看起来都一样,而无需任何水平滚动。 目前只有几分钟的时间,但是 - 您原来的“宽度相等”约束(内容视图到父视图)应该为您做到这一点。 终于明白了,我显然不得不在内容视图和滚动视图之间设置一个相等宽度的约束,而不是内容视图和滚动视图的超级视图。现在一切正常,感谢您的帮助。以上是关于具有自动布局的 iOS UIScrollView 未正确居中的主要内容,如果未能解决你的问题,请参考以下文章
UIScrollView 具有自动布局的错误 contentSize
ios: uiscrollview 和 uiview 自动布局