我有一个自定义的UITableViewCell,它有一个缩略图和一堆文本。将行高度配置为使用
tableView.estimatedRowHeight = 129;
tableView.rowHeight = UITableViewAutomaticDimension
行高应精确计算为138个点。在iPhone 5上一切看起来都很棒。然而,在iPhone 6 Plus上,对于随机行,自动行高度会间歇性地失败,日志如下。
(
"<NSLayoutConstraint:0x17009ddd0 V:|-(20)-[scoop.ThumbnailImage:0x124d2a5a0] (Names: '|':UITableViewCellContentView:0x124e23200 )>",
"<NSLayoutConstraint:0x17009de70 UITableViewCellContentView:0x124e23200.bottomMargin == scoop.ThumbnailImage:0x124d2a5a0.bottom + 20>",
"<NSLayoutConstraint:0x17009e780 V:[scoop.ThumbnailImage:0x124d2a5a0(90)]>",
"<NSLayoutConstraint:0x17009ef00 'UIView-Encapsulated-Layout-Height' V:[UITableViewCellContentView:0x124e23200(138.333)]>"
)
日志的最后一行似乎表明,由于某种原因,行高度被计算为138.333 ,而不是138。我已经头疼了一段时间了,但我不明白为什么会发生这种情况。有人能帮帮忙吗?
更新:这就是我的表格视图单元格的样子。
更新我无法从主代码库中获取代码,因为它是一个更大项目的一部分。但我已经设法用一个非常简单的项目重现了这个问题。请在这里找到on github。
发布于 2015-08-29 15:50:43
这个警告告诉你在你的约束中有冲突。将高度约束的优先级降低到999,它就会消失。在你的Github项目中进行了测试,运行良好。
发布于 2015-08-29 17:44:01
3倍比例的显示器( iPhone 6+是)上的0.333可能与单元分隔符相连。
注意,您的约束并没有设置单元格的大小,而是设置了contentView
的大小。但是单元格必须在单元格分隔符的单元格高度上增加2个像素(= 0.666点)。Autolayout尝试将视图位置保持在整数边界上,因此将0.666点添加到单元格高度可能会导致内容高度增加0.333。
您可以通过将表分隔符设置为None
来避免该错误。尽管像另一个answer建议的那样,将其中一个优先级设置为999 (通常是最低优先级)通常是一个很好的解决方案。
发布于 2015-08-24 08:19:43
警告告诉您问题的确切原因,但您可能没有意识到这一点。前三个约束是针对90像素高的图像,该图像比容器顶部低20像素,比容器底部边缘高20像素。这是130,这与第四个约束不兼容,第四个约束要求总高度为138。但是,因为底边约束是相对于容器的边界的,所以增加了一定数量的像素。或者删除总高度限制(我的建议),或者更改顶部和底部边缘的数量。
https://stackoverflow.com/questions/32172250
复制相似问题