UIScrollView
在解释自动布局约束的方式上有点特殊,因为 subview 的几何填充其 contentSize
而不是 frame
/界限
。 Apple 在此处对此事进行了很好的描述:https://developer.apple.com/library/ios/technotes/tn2154/_index.html
我面临的问题是当我尝试将多行标签放入 scrollView
时。
示例约束如下所示:
scrollView.addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-20-[image(==imageWidth)]-15-[captionLabel]|", options: .AlignAllCenterY, metrics: metrics, views: views))
我没有显示由占用更多垂直空间的其他 scrollView.addConstraints()
调用处理的额外 subview 。
理想情况下,我希望两个元素都水平放置在屏幕内,并根据需要将 captionLabel
分成多行。相反,整个文本呈现为一行,scrollView
设置其 contentSize
以适应更大的宽度。
有哪些选项可以解决自动布局问题?
编辑:对于嵌套更多的 contentView 不太满意,所以我最终在单独的约束中设置了所需的标签宽度,并在 viewWillTransitionToSize
中对其进行了更新。在我的例子中,使用了一个类似标签“行”的完整列表,只有第一个标签的宽度通过计算约束设置,其余的设置为等于第一个标签。
最佳答案
首先,您的 View 层次结构应如下所示:
最重要的是你的 ScrollView 中只有一个 subview ,它将充当内容 View 。
约束:
ScrollView = 4 个从边缘到主视图的约束,间距为 0
ContentView = 4 从边缘到 ScrollView 的约束,间距为 0
并避免水平滚动
在ContentView和Main view(不是ScrollView)之间添加一个等宽的约束
现在将内容添加到您的内容 View 。像往常一样使用自动布局。不要忘记将标签的行数设置为 0,添加标签的顶部、右侧、左侧底部约束。
结果应该和我的一样:
关于ios - UIScrollView 自动布局 - 仅垂直滚动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31439472/