我在使用自动布局约束时遇到UIScrollView问题。我有以下视图层次结构
-view
-scrollView
-view A
-view B
在视图中,内容中的A或视图B根据接收响应而增加。所以请帮我如何根据内容设置滚动视图高度。
答案 0 :(得分:0)
如果您正在使用autolayout,则需要设置约束:
- 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采用内容大小。 现在,您需要在父视图上为scrollview设置约束。
- scrollView.top = view.top + 100 (just an example)
对你来说最重要的是在scrollview中的所有子视图之间有约束,第一个需要在scrollview的顶部有一个顶部约束,最后一个必须连接到scrollview的底部。
该规则适用于您希望“自动调整”高度的所有视图 - 例如自动调整UITableViewCell
s
答案 1 :(得分:0)
在IB中使用scrollView,您必须为ViewA&amp ;;设置约束。 ViewB高度。如果没有设置scrollView就无法设置他的身高。
您必须将scrollview边距的约束设置为superview。
答案 2 :(得分:0)
来自Apple开发人员关于自动布局指南,有一个部件名称“使用滚动视图”为您的问题提供了明确的解决方案
对于大多数常见的布局任务,如果使用,逻辑会变得容易得多 用于包含滚动视图内容的虚拟视图或布局组。 在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];