UIScrollView
在解释自动布局约束时有点特别,因为子视图的几何填充contentSize
而不是frame
/ bounds
。 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()
来电处理的其他子视图。
理想情况下,我希望两个元素在屏幕内水平放置,并根据需要将captionLabel
分成多行。而是将整个文本渲染为一行,scrollView
设置其contentSize
以适应更大的宽度。
自动布局可以解决哪些选项?
编辑:对嵌套更多内容视图不太满意,因此我最终在单独的约束中设置了所需的标签宽度,并在viewWillTransitionToSize
中更新了它。在我的例子中,列出了类似的"行"使用的标签中,只有第一个标签的宽度通过计算约束设置,其余的设置为等于第一个。
答案 0 :(得分:3)
首先,您的视图层次结构应如下所示:
最重要的是,滚动视图中只有一个孩子,它将充当内容视图。
约束:
ScrollView =从边缘到主视图的4个约束,间距为0
ContentView =从边缘到ScrollView的约束,间距为0
并避免水平滚动
在ContentView和主视图(不是ScrollView)之间添加相等宽度的约束
现在将内容添加到您的内容视图中。像往常一样使用自动布局。不要忘记将0设置为标签的行数添加标签的顶部,右侧,左下限制。
结果应该像我的一样:
答案 1 :(得分:0)
我不知道这是否可以帮助你(我希望能够理解这个问题),但是如果你只想要滚动垂直,你可以在你的实现中添加它:
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
// Vertical Only ** If you have several scrolling objects detect by Tag
if (scrollView.tag == 100) {
CGPoint offset = scrollView.contentOffset;
offset.x = 0;
scrollView.contentOffset = offset;
}
}