构建于Xcode 7.2.1,iOS 9.2
我有一个UITableView
,其单元格具有自动高度。
tableView.estimatedRowHeight = 80
tableView.rowHeight = UITableViewAutomaticDimension
单元格的布局如下:
UITableViewCell
contentView
outerStackView - pinned to top, left, right, bottom edges of the contentView with autolayout
leftColumnStackView - 38% of width of outerStackView
topStackView
label UILabel
value UILabel
bottomStackView
label UILabel
value UILabel
middleColumnStackView - 38% of width of outerStackView
...
rightColumnStackView - rest of the width of outerStackView
...
单元格中有6个标签/值对 - [标签X:值]。每个标签/值对由2 UILabels
组成,其内容拥抱,内容压缩阻力属性相应设置,以提供所需的外观。
label.numberOfLines = 0
label.textAlignment = NSTextAlignment.Left
label.setContentCompressionResistancePriority(1000, forAxis: .Horizontal)
label.setContentHuggingPriority(1000, forAxis: .Horizontal)
value.numberOfLines = 0
value.setContentCompressionResistancePriority(500, forAxis: .Horizontal)
value.setContentHuggingPriority(500, forAxis: .Horizontal)
// there are 6 stack views, each containing a label/value pair
// the stack views are .Horizontal alignment, and pinned to the
// columns they sit in
stackView.addArrangedSubview(label)
stackView.addArrangedSubview(value)
然而,有时单元格高度会适当地测量自身,有时候会增加一堆额外的空间(有趣的是,额外的空间总是等于 在内容压缩时会出现的空间/抱抱没有添加到任何一个标签)。
以下是发生的不一致行为:
但是,当我从标签中删除内容压缩/阻力时,单元格始终是正确的高度,但看起来像这样:
有人经历过类似的经历吗?有任何建议吗?
答案 0 :(得分:1)
想出来了!
这最终与使用AutoLayout定位单元格contentView
的方式有关。显然,默认情况下,它没有正确布局和计算其子视图的位置。
在我的UITableViewCell子类中,我将以下内容添加到init()
contentView.translatesAutoresizingMaskIntoConstraints = false
contentView.leadingAnchor.constraintEqualToAnchor(leadingAnchor).active = true
contentView.trailingAnchor.constraintEqualToAnchor(trailingAnchor).active = true
contentView.topAnchor.constraintEqualToAnchor(topAnchor).active = true
contentView.bottomAnchor.constraintEqualToAnchor(bottomAnchor).active = true
通过将contentView
固定到单元格,UITableViewCell
不一致的高度分配问题消失了,并且始终显示正确的高度。
这导致contentView
被拉伸到所有4个边缘,这会影响其他一些事情(例如UITableView
编辑翻转到true
时的动画),但是现在我可以通过其他方式解决这些问题,因为没有任何事情被计算为错误或正在发生意外的事情。