UITableView自动调整行大小约束在iPhone 6Plus上神秘破解

drc*_*coa 24 constraints uitableview ios autolayout swift

我有一个自定义UITableViewCell,它有一个缩略图和一堆文本.行高配置为使用自动计算

tableView.estimatedRowHeight = 129;
tableView.rowHeight = UITableViewAutomaticDimension
Run Code Online (Sandbox Code Playgroud)

行高应该精确计算为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)]>"
)
Run Code Online (Sandbox Code Playgroud)

日志的最后一行似乎表示由于某种原因行高计算为138.333 而不是138.我一直在敲我的头一段时间,但我无法弄清楚为什么会发生这种情况.有人可以帮忙吗?

更新:这是我的表格视图单元格的样子.

细胞

更新我无法从主要回购中获取代码,因为它是更大项目的一部分.但我设法通过一个非常简单的理智项目重现了这个问题.请在github上找到它.

Yar*_*sim 33

这个警告告诉你,你的约束是冲突.将高度约束的优先级降低到999,它将消失.在你的Github项目中测试它并且工作得很好.

在此输入图像描述

  • 这会起作用,但它仍然意味着约束在某种程度上打破了,不是吗? (5认同)

Sul*_*han 6

3倍刻度显示屏(iPhone 6+是)上的0.333可能与电池分隔符相连。

请注意,约束不会设置单元格的大小,而是会设置的大小contentView。但是单元格必须为单元格分隔符的单元格高度添加2个像素(= 0.666点)。自动布局会尝试将视图位置保持在整数边界上,因此,在单元格高度上添加0.666点可以导致内容高度上增加0.333。

您可以通过将表分隔符设置为来避免错误None。虽然在设置优先级为999(通常是底部优先级)作为其他的一个答案已经建议在一般一个好的解决方案。

  • 删除分隔符不能解决此问题。 (2认同)