使用自动布局的动态高度网格视图

时间:2015-11-06 09:21:56

标签: ios grid autolayout interface-builder views

我使用自动布局基本上创建一个表(如Excel或HTML)。有3行3列。每一行都是一个视图,每个单元格都是该行内的视图。每个单元格都包含两个标签:一个始终是一行,另一个可以根据其内容动态调整大小。

如果单元格中的一个标签扩展,则整个行会扩展。我附上了一个例子来说明我的观点。

Grid example

我已将所有单元格限制在其行的顶部/底部。标签对细胞侧面有限制。标签的行数设置为0.结果如下:

Simulator

几乎我想要的东西。除了标签的顶部没有对齐。我已经对优先级进行了一些调整:设置单元格'内容拥抱优先级为1000,使标签的底部空间约束"> = 0"。这似乎没有帮助或产生错误。

这可以通过自动布局实现吗?或者我应该使用像CollectionView这样的东西吗?

1 个答案:

答案 0 :(得分:0)

对于那些想知道:我通过使用嵌套的UIStackViews解决了这个问题。

用于保存行的垂直堆栈视图,行是水平堆栈视图,单元格是包含两个标签的垂直堆栈视图。

要使UIStackViews使用动态标签高度,您必须设置preferredMaxLayoutWidth(我认为这是一个错误)。我为此创建了一个UILabel子类:

class FixedLabel: UILabel {
    // This is required for iOS 9, to make dynamic labels resize properly

    override func layoutSubviews() {
        super.layoutSubviews()
        preferredMaxLayoutWidth = bounds.width - 1
    }
}