UITableView自动调整大小的行约束在iPhone 6Plus上神秘地打破了

问题描述 投票:24回答:3

我有一个自定义的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。我已经敲了好一会儿,但我不知道为什么会这样。有人可以帮忙吗?

更新:这是我的表格视图单元格的外观。

“

UPDATE我无法从主存储库中获取代码,因为它是较大项目的一部分。但是我设法通过一个非常简单的理智的项目重现了这个问题。请在这里on github中找到它。

ios swift uitableview autolayout constraints
3个回答
30
投票

此警告告诉您约束中存在冲突。将高度限制的优先级降低到999,它将消失。在您的Github项目中对其进行了测试,并且效果很好。

enter image description here


4
投票

0.3倍屏幕(iPhone 6+的分辨率为0.333)可能与电池分隔符相连。

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

您可以通过将表格分隔符设置为None来避免错误。尽管将另一个优先级设置为999(通常是最低优先级)(通常由另一个优先级answer提出),通常是一个很好的解决方案。


0
投票

该警告告诉您确切的问题是什么,但您可能没有意识到。前三个约束是针对90像素高的图像,该图像位于其容器顶部下方20像素,而其容器底部margin

© www.soinside.com 2019 - 2024. All rights reserved.