无法使用 Autolayout 正确构建 UIScrollView

Posted

技术标签:

【中文标题】无法使用 Autolayout 正确构建 UIScrollView【英文标题】:Can't build UIScrollView with Autolayout properly 【发布时间】:2015-12-05 07:08:58 【问题描述】:

无法使用自动布局在滚动视图内构建内容。是的,我已经调查了很多,阅读了苹果技术说明和一些文章,我知道,内容视图应该受到滚动视图的超级视图的限制,但仍然无法达到预期的结果。我期待这个结果:

    固定或可滚动(适用于小屏幕)纵向模式 始终可滚动横向模式,不会松动或重叠我的固定内容 我的按钮(红色视图)应始终位于底部 我的照片(黄色视图)应始终为固定大小,并且不能丢失内容 (就像我错误的横向模式一样)

【问题讨论】:

那么您添加了哪些约束以及它做错了什么(以及何时)? 您可以在图片中看到的约束条件。错误在于它在横向模式下不可滚动。我应该在代码中设置滚动视图的内容大小吗?你能建议一些autolayot阅读或大师学习吗?因为我经常因为缺乏相关知识而在自动布局上苦苦挣扎。谢谢:-) 将 contentView 的高度固定为恒定值! scrollView 应该有一个 contentView 基于它决定可滚动区域。内容视图的宽度应该等于主视图的宽度,这样它就不能在水平方向上滚动,但高度应该大于视图,使它可以在垂直方向上滚动。 你可能会发现这很有用theglowingtree.wordpress.com/2015/09/30/… 【参考方案1】:

完成这项工作实际上很容易。您只需执行以下步骤:

    UIScrollView 添加为 UIViewController 的子视图` 将UIView 添加为UIScrollView 的子视图 将UIButton 添加为UIViewController 的子视图。如果您希望它粘在底部,请不要将其添加为 UIScrollView 的子视图。

然后添加以下约束:

    UIScrollView固定在UIViewControllers视图的顶部左侧右侧UIButton固定在UIViewControllers视图的leftright底部UIButton 顶部固定到UIScrollView 底部UIImageView 顶部horizo​​ntalCenter底部固定到UIScrollView 设置UIImageView heightwidth约束 设置UIButton高度约束

就是这样。不要向UIScrollView contentView 添加任何内容,也不要以编程方式设置contentSizecontentSize 是由 Auto Layout 自动设置的。

这里是约束和结果的截图:

【讨论】:

以上是关于无法使用 Autolayout 正确构建 UIScrollView的主要内容,如果未能解决你的问题,请参考以下文章

UITableViewCell 内的 UIStackView 在 AutoLayout 上无法正确调整

AutoLayout正确定位按钮

长表单的 iOS AutoLayout

iOS 8 xib + AutoLayout 无法为 tableViewHeaderView 正常工作

AutoLayout 和 Embedded stackview 约束冲突

使用Autolayout时在layoutSubviews中添加子视图是不是正确