如何将scrollview与动态高度的子视图一起使用?

时间:2016-03-20 20:37:25

标签: ios xcode uistoryboard

我在scrollview中有一个标签,可以只有1行和多达10行。我无法弄清楚如何使scrollview内容大小动态化,以便相应地延伸。

我尝试添加> = 100(任意数字)的高度限制,但后来抱怨它是Inequality Constraint Ambiguity

img

3 个答案:

答案 0 :(得分:2)

快速回答

  1. 删除标签上的当前高度限制。
  2. 确保标签Lines属性设置为0Line Breaks设置为Word Wrap
  3. 将垂直间距约束添加到标签上方和下方的视图中。
  4. 确保每个视图都有从顶部到底部边距的垂直间距约束,以便滚动视图推断其contentView的高度。
  5. <强>解释

    为了让滚动视图推断其内容大小,它必须具有从边距到子视图到边距的约束 - 想象它就像气球一样,内容是内部的空气推动墙壁以使气球达到它的大小。从子视图到边距的约束允许子视图的大小推动内容视图的墙。

    对于标签设置,Lines属性为0表示它将具有可变数量的行,就像您想要的那样。设置为Line Breaks的{​​{1}}属性意味着它将确保单词不会被截断(截断)或分解为字符,而是将其作为整个单词推送到下一行。

答案 1 :(得分:0)

如果您没有为UILabel指定高度限制,则它将采用适合整个文本的高度。只需确保将行数设置为0,并确保标签设置了所有边距约束。

答案 2 :(得分:0)

Apple的这篇技术说明解释了如何使用仅自动布局https://developer.apple.com/library/ios/technotes/tn2154/_index.html正确配置具有可滚动内容的滚动视图。

从概念上讲,在您的情况下,这就是您需要做的事情:

查看层次结构:

MainView -> ScrollView -> ContentView -> UILabel

  1. Scrollview受限于主视图的所有边缘,
  2. ContentView受限于ScrollView的所有边缘
  3. 并且UILabel被约束到ContentView的所有边缘(将UILabel行数设置为0并删除当前已应用的高度约束)
  4. 这里的关键是要意识到contentView的大小只取决于UILabel的大小,因此UILabel高度会延伸,所以contentView也是如此。这将允许scrollView自动推断contentSize并在需要时启用滚动。