iOS 8 - 带有动态高度的孩子的UIScrollView

时间:2014-10-20 20:14:38

标签: ios dynamic uiscrollview storyboard height

我在使用包含多个子视图的UIScrollView时遇到了麻烦。其中一个高度是根据文本的长度动态计算的,当它变得更高时,将下面的内容推下来。

这是此应用的Android版本的屏幕截图:

Android version

绿色标题下的描述视图是如果描述长于一行则更改高度的视图。这意味着我无法在所有视图上使用高度约束,这似乎是在故事板中使用自动布局时UIScrollView工作的原因。

UIScrollView置于包含多个子视图的故事板中的UIViewController内部的最佳方法是什么,如上面的屏幕截图,将适用于所有屏幕宽度(iPhone 4,iPhone 5,iPhone 6等。)并允许视图在保持相对于其他视图的位置的同时改变高度?

这就是我的故事板和这个特定的视图控制器的样子:

Storyboard layout

3 个答案:

答案 0 :(得分:3)

" iOS方式"要做到这一点,请使用UITableViewController(后者又是UIScrollView子类。)

您可以使用Storyboards和Prototype Cells轻松创建一个。

至于高度,您可以使用引用UILabel并在表格视图委托textRectForBounds:limitedToNumberOfLines:上返回其tableView:heightForRowAtIndexPath:,并将0作为线。

另外,您可以查看我们使用的this library以及它如何处理dynamic heights

答案 1 :(得分:0)

正确的方法是将标签中的行数设置为0,这将使其具有灵活的高度。然后将标签的顶部和底部锚定到其上方和下方的邻居。 UIScrollView必须能够通过添加其内容的所有内容的高度来确定其内容的高度。

答案 2 :(得分:-2)

您仍然可以使用高度约束,您只需要首先计算该子视图的高度。

要计算其中包含文字的UILabel的尺寸,请使用以下内容:

[textString boundingRectWithSize:CGSizeMake(screenWidth, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName : fontForLabel} context:nil]