我正在尝试调整两个垂直UIStackView
的大小,以便它们以我想要的方式显示内容。两个垂直UIStackViews
位于另一个水平UIStackView
内,位于UITableViewCell
内。每个垂直UILabel
中有三UIStackView
个。这是我当前的视图层次结构:
图像视图的宽度和高度约束为具有相同的比例。水平堆栈视图的对齐方式为.Center
,分布为.Fill
。垂直堆栈视图1具有.Leading
的对齐和.EqualSpacing
的分布。垂直堆栈视图2具有.Trailing
的对齐和.EqualSpacing
的分布。所有标签只有一行,堆栈视图2中的内容是可选的 - 如果我不必在{{1}的堆栈视图2中显示任何内容,我将text
属性设置为nil
}}
我一直试图在堆栈视图2中获取标签,以正确显示文本而不会截断。将垂直堆栈视图1中的文本截断是很好的,但似乎堆栈视图1喜欢调整自身大小以占据大部分宽度。更奇怪的是,这并不是一直发生的。 当垂直堆栈视图1中的标签非常短时,似乎更经常发生。似乎垂直视图2的大小调整,因此它只与最后一个标签一样宽,这通常是三个标签中最短的。
以下是我没有成功的尝试:
tableView:cellForRowAtIndexPath:
进行子类化,使其返回UIStackView
,intrinsicContentSize
与其标签一样大{&#39}。 width
任何帮助都将不胜感激。
答案 0 :(得分:0)
我明白了。我将UIStackView
子类化,除了覆盖intrinsicContentSize
之外,我还覆盖layoutSubviews
以使其内在内容大小无效。
class NestedStackView: UIStackView {
override func intrinsicContentSize() -> CGSize {
var size = super.intrinsicContentSize()
for view in arrangedSubviews {
let viewSize = view.intrinsicContentSize()
if axis == .Vertical {
size.width = max(viewSize.width, size.width)
} else {
size.height = max(viewSize.height, size.height)
}
}
return size
}
override func layoutSubviews() {
invalidateIntrinsicContentSize()
super.layoutSubviews()
}
}