使用自动布局的具有动态高度的网格视图
Grid view with dynamic height using auto layout
我使用自动布局基本上创建了一个 table(如 Excel 或 HTML)。有 3 行和 3 列。每一行都是一个视图,每个单元格都是该行内的一个视图。每个单元格包含两个标签:一个总是单行,另一个可以根据其内容动态调整大小。
这个想法是,如果单元格内的标签之一展开,则整行都会展开。我附上了一个例子来说明我表达观点的方式。
我已将所有单元格限制在它们所在行的 top/bottom 中。标签对其单元格的侧面有约束。标签的行数设置为 0。结果是这样的:
几乎是我想要的。除了标签的顶部没有对齐。我尝试了一些优先级:将单元格的内容拥抱优先级设置为 1000,使标签的底部 space 约束“>= 0”。这似乎没有帮助或产生错误。
这可以通过自动布局来实现吗?或者我应该使用 CollectionView 之类的东西吗?
对于那些想知道的人:我通过使用嵌套的 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
}
}
我使用自动布局基本上创建了一个 table(如 Excel 或 HTML)。有 3 行和 3 列。每一行都是一个视图,每个单元格都是该行内的一个视图。每个单元格包含两个标签:一个总是单行,另一个可以根据其内容动态调整大小。
这个想法是,如果单元格内的标签之一展开,则整行都会展开。我附上了一个例子来说明我表达观点的方式。
我已将所有单元格限制在它们所在行的 top/bottom 中。标签对其单元格的侧面有约束。标签的行数设置为 0。结果是这样的:
几乎是我想要的。除了标签的顶部没有对齐。我尝试了一些优先级:将单元格的内容拥抱优先级设置为 1000,使标签的底部 space 约束“>= 0”。这似乎没有帮助或产生错误。
这可以通过自动布局来实现吗?或者我应该使用 CollectionView 之类的东西吗?
对于那些想知道的人:我通过使用嵌套的 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
}
}