我有一个应该显示两个标签出其中一个可以是1个或2行的高度一个UITableViewCell。标签应该有相互之间具有固定的间距。总之他们总是希望在细胞内垂直居中。
我认为,一个UIStackView将是一个很好的解决方案,但没有一个分发选项允许项目之间的间距固定。什么是描述一个很好的解决方案?我已附加的图示(灰色=细胞,行=细胞的垂直中心),以使此easier
你的图像不显示实际垂直居中的标签。
在每个标签一行,它们都是20.5-PTS高(假设默认字体/大小),用12磅的间隙。精细。足够容易Y轴中心。
与顶部标签的两行,就变成(20.5-PTS + 0隙+ 20.5分),然后12-PT间隙,然后20.5-PT单行标签。因此,这不是一个均匀分布文本行的,这就是为什么堆栈视图的垂直居中不通过文字的第二行的中心线上放置中心线。
如果你检查你的形象(这我假设你的手喝醉了的),你有底部标签的底部和之间的视图的顶部和顶部标签顶部之间201
像素,但只有198
像素视图的底部。
如果这真的是你怎么想它铺陈,你可以这样做:
然后,覆盖willDisplay cell
:
override func tableView(_ tableView: UITableView, willDisplay cell: UITableViewCell, forRowAt indexPath: IndexPath) {
if let c = cell as? ExampleCell {
cell.layoutIfNeeded()
let topHeight = c.topLabel.frame.height
let botHeight = c.bottomLabel.frame.height
if topHeight > botHeight {
c.stackViewCenterYConstraint.constant = 6.0
} else if botHeight > topHeight {
c.stackViewCenterYConstraint.constant = -6.0
} else {
c.stackViewCenterYConstraint.constant = 0.0
}
}
}
6.0
的值是堆栈视图间距(12 * 0.5 = = 6)的1/2,所以你需要改变,如果你改变你的间距。
下面是结果(红线是垂直的中线):