2015-11-06 78 views
0

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

这个想法是,如果单元格内的其中一个标签展开,整个行就会展开。我附上了一个例子来说明我已经布置了我的观点的方式。

Grid example

我已经做了约束所有的细胞其行的顶部/底部。标签对其单元的边有约束。标签有其设置为0,结果行数是这样的:

Simulator

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

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

+0

上约束信息不足以推导出的问题,但通过观察第二图像,我能猜出你的顶部标签高度现辖降低标签的高度时,文本少了。为两个标签应用一些背景颜色,看看是否如此。如果是这种情况,那么这意味着顶级标签的高度是灵活的,您需要保持不变。 – Gandalf

回答

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 
    } 
} 
相关问题