如何使用scrollview与dynamic高度的子视图?
我在滚动视图中有一个标签,可以less至1行,多达10行。 我很难找出如何使scrollview内容大小dynamic,以便相应地扩展。
我尝试添加> = 100(任意数字)的高度约束,但是却抱怨它是一个Inequality Constraint Ambiguity
。
快速回答
- 删除标签上的当前高度限制。
- 确保标签
Lines
属性设置为0
并且Line Breaks
设置为Word Wrap
。 - 将垂直间距约束添加到标签上方和下方的视图。
- 确保每个视图都有从顶部到底部边距的垂直间距约束,以便滚动视图能够推断其
contentView
的高度。
说明
为了让滚动视图能够推断出它的内容大小,它必须具有从边缘到子视图到边缘的约束 – 想象它像气球一样,内容是内部的空气,推动墙壁使气球变成大小。 从子视图到页边距的约束条件允许子视图的大小将内容视图的内容推出。
对于标签设置Lines
属性为0
意味着它将有可变数量的行,就像你想要的。 将“ Line Breaks
属性设置为“ Word Wrap
意味着它将确保单词不被截断(截断)或分解为字符,而是以整个单词的forms推送到下一行。
如果您没有为UILabel
指定高度约束,则需要一个适合整个文本的高度。 只要确保行数设置为0,并且您的标签具有设置的所有边距约束。
这篇来自Apple的技术说明解释了如何使用自动布局正确configuration带有可滚动内容的滚动视图https://developer.apple.com/library/ios/technotes/tn2154/_index.html 。
从概念上讲,就你而言,这是你需要做的事情:
查看层次:
MainView -> ScrollView -> ContentView -> UILabel
- 滚动视图被限制在主视图的所有边缘,
- ContentView被限制在ScrollView的所有边缘
- 并且UILabel被约束到ContentView的所有边(将UILabel行数设置为0,并移除您当前应用的高度约束)
这里的关键是要认识到contentView的大小只取决于UILabel的大小,所以UILabel的高度也是如此。 这将允许scrollView自动推断contentSize并在需要时启用滚动。