为 Autolayout 设置 UIScrollView 以便滚动 _only_ 用于小屏幕

Posted

技术标签:

【中文标题】为 Autolayout 设置 UIScrollView 以便滚动 _only_ 用于小屏幕【英文标题】:Setup UIScrollView for Autolayout in order to scroll _only_ for small screens 【发布时间】:2016-04-23 21:27:57 【问题描述】:

我有一个仅限 iPhone 的纵向应用程序,它必须在 iPhone 4s 及更高版本上运行。该设计针对 iPhone 6。

我希望它以这样一种方式工作,即对于小屏幕,如果内容不合适,它会垂直滚动。一切都使用自动布局进行布局,在 iPhone 6 及更高版本上看起来很完美。但在较小的 iPhone 上,它会尝试垂直挤压内容并破坏设计。

我已经将所有内容嵌入到内容视图中,并将此视图添加到 UIScrollView。 我想如果我向内容视图添加高度约束,UIView 的 contentSize 会滚动 - 但事实并非如此。自动布局打破了这个限制。

我想我会理解带有自动布局的滚动视图的“特殊”约束...

我做错了什么?

【问题讨论】:

【参考方案1】:

如果没有运行时的约束列表,几乎不可能知道实际问题是什么,但是如果您阅读这篇出色的文章,您很可能会弄清楚如何正确解决问题:

ios: How To Make AutoLayout Work On A ScrollView

【讨论】:

【参考方案2】:

本视频将帮助您如何使用 UIScrollView 的自动布局约束: https://www.youtube.com/watch?v=UnQsFlMGDsI

【讨论】:

【参考方案3】:

你的约束应该是这样的,

滚动视图 - 顶部、底部、前导、尾随

视图(内容视图)- 顶部、底部、前导、尾随、固定高度并在容器中水平居中

并在该视图中添加所有其他内容。你会得到想要的结果。它将滚动到小屏幕尺寸然后是内容视图,并且不会滚动到更大的屏幕然后是内容视图。

在此设置之后,如果您无法滚动,请在size inspector 中检查content view's bottom constraint's constant。使其为零(如果无法滚动则仅)。

如果您想更深入地了解其他答案中给出的链接,可以使用许多教程

希望这会有所帮助:)

【讨论】:

以上是关于为 Autolayout 设置 UIScrollView 以便滚动 _only_ 用于小屏幕的主要内容,如果未能解决你的问题,请参考以下文章

SB中使用Autolayout设置到父视图的间距为0

AutoLayout:如果需要,我可以指定应该打破哪个约束并设置备份吗?

如何将 AutoLayout 约束的常量设置为超级视图的百分比?

IOS/Autolayout:在生命周期中为代码中创建的元素设置约束

iOS将autoLayout按钮位置设置为故事板中心的剩余空间

使用Autolayout为UIView设置动画