如何动态调整滚动视图高度
Posted
技术标签:
【中文标题】如何动态调整滚动视图高度【英文标题】:How to adjust scrollview height dynamically 【发布时间】:2017-04-24 06:53:19 【问题描述】:我在使用自动布局约束时遇到了 UIScrollView 的问题。我有以下视图层次结构
-view
-scrollView
-view A
-view B
在View中,A或View B里面的内容根据收到的响应而增加。所以请帮我如何根据内容设置滚动视图高度。
【问题讨论】:
tableView 是最好的选择,而不是滚动视图。 你确定scrollView height吗?也许您需要更新其contentSize
?
对屏幕的上、下、左、右和中心对齐进行自动布局约束
是的,我确信滚动视图的高度。如果我更新它的高度,我也会更新它的内容大小,然后在底部显示空间。
我还创建了自动布局约束到顶部、底部、左侧和右侧以及屏幕的中心对齐@AnilKumar
【参考方案1】:
如果您使用自动布局,则需要设置约束:
- viewA.top = scrollView.top
- viewA.height = 100 (or make the view autosizing the same way as scrollview)
- viewB.top = viewA.bottom
- viewB.height = 100 (or make the view autosizing the same way as scrollview)
- viewB.bottom = scrollView.bottom
这将允许您使滚动视图适应内容大小。 现在您需要在父视图上为滚动视图设置约束。
- scrollView.top = view.top + 100 (just an example)
对你来说最重要的是在滚动视图中的所有子视图之间有约束,加上第一个需要对滚动视图的顶部有顶部约束,最后一个必须连接到滚动视图的底部。
该规则适用于您想要“自动调整”高度的所有视图 - 例如自动调整UITableViewCell
s
【讨论】:
【参考方案2】:在 IB 中使用 scrollView 必须为 ViewA 和 ViewB 的高度设置约束。如果不设置scrollView不能设置他的高度。
您必须将滚动视图边距的约束设置为超级视图。
【讨论】:
【参考方案3】:来自 Apple 开发人员关于 Auto Layout Guide 的部分名称“Working with Scroll Views”为您的问题提供了明确的解决方案
对于大多数常见的布局任务,如果您使用 包含滚动视图内容的虚拟视图或布局组。 在 Interface Builder 中工作时,显示了一般方法 下面:
将滚动视图添加到场景中。 绘制约束来定义 像往常一样滚动视图的大小和位置。 为滚动添加视图 看法。将视图的 Xcode 特定标签设置为 Content View。 将内容视图的顶部、底部、前导和后沿固定到滚动条 视图的对应边。内容视图现在定义了滚动 视图的内容区域。 (可选)要禁用水平滚动,请将内容视图的宽度设置为等于滚动视图的宽度。内容视图现在水平填充滚动视图。 (可选)要禁用垂直滚动,请将内容视图的高度设置为等于滚动视图的高度。内容视图现在水平填充滚动视图。 在内容视图中布置滚动视图的内容。使用约束在内容视图中正常定位内容。
通过代码进行自动布局的另一件重要的事情是 通过此代码禁用从自动调整大小掩码到约束的转换:
scrollView.translatesAutoresizingMaskIntoConstraints = false;
viewA.translatesAutoresizingMaskIntoConstraints = false;
viewB.translatesAutoresizingMaskIntoConstraints = false;
所以你的视图层次结构是:
-view
-scrollView
-scrollContentView
-view A
-view B
scrollView 的约束类似于普通视图,例如,您希望 scrollView 占据其父视图中的所有空间。
[scrollView.leadingAnchor constraintEqualToAnchor:view.leadingAnchor];
[scrollView.trailingAnchor constraintEqualToAnchor:view.trailingAnchor];
[scrollView.topAnchor constraintEqualToAnchor:view.topAnchor];
[scrollView.bottomAnchor constraintEqualToAnchor:view.bottomAnchor];
和scrollContentView类似
[scrollContentView.leadingAnchor constraintEqualToAnchor: scrollView.leadingAnchor];
[scrollContentView.trailingAnchor constraintEqualToAnchor: scrollView.trailingAnchor];
[scrollContentView.topAnchor constraintEqualToAnchor: scrollView.topAnchor];
[scrollContentView.bottomAnchor constraintEqualToAnchor: scrollView.bottomAnchor];
最后是viewA和viewB的约束,将viewA的底部引脚设置为viewB的顶部
[viewA.leadingAnchor constraintEqualToAnchor: scrollContentView.leadingAnchor];
[viewA.trailingAnchor constraintEqualToAnchor: scrollContentView.trailingAnchor];
[viewA.topAnchor constraintEqualToAnchor: scrollContentView.topAnchor];
[viewA.bottomAnchor constraintEqualToAnchor: viewB.topAnchor];
[viewB.leadingAnchor constraintEqualToAnchor: scrollContentView.leadingAnchor];
[viewB.trailingAnchor constraintEqualToAnchor: scrollContentView.trailingAnchor];
[viewB.topAnchor constraintEqualToAnchor: viewA.bottomAnchor];
[viewB.bottomAnchor constraintEqualToAnchor: scrollContentView.topAnchor];
【讨论】:
以上是关于如何动态调整滚动视图高度的主要内容,如果未能解决你的问题,请参考以下文章