【问题标题】:UITableViewCell auto layout constraint problems due to separator line height由于分隔线高度导致的 UITableViewCell 自动布局约束问题
【发布时间】:2020-10-17 07:33:21
【问题描述】:

我有这个相当简单的 UITableViewCell。

它有一个Avatar 视图,其高度设置为34 磅,单元格contentView 的顶部和底部的垂直间距为10 磅。单元格本身设置为使用自动行高,这里我已经可以看到一个小问题:行高值设置为 54.5。

是的,当我检查 Avatar 视图时,它的高度为 34.5,尽管它要求高度为 34 磅,并且内容拥抱和抗压性都设置为 1000。

当我在 iPhone 11 Pro 模拟器上运行应用程序时,我在控制台中收到以下警告:

(
    "<NSLayoutConstraint:0x6000030a39d0 Jetfly.Avatar:0x7fabbb8e1310.height == 34   (active)>",
    "<NSLayoutConstraint:0x6000030a3f70 V:|-(10)-[Jetfly.Avatar:0x7fabbb8e1310]   (active, names: '|':UITableViewCellContentView:0x7fabbb8e1ab0 )>",
    "<NSLayoutConstraint:0x600003088d20 Jetfly.Avatar:0x7fabbb8e1310.centerY == UITableViewCellContentView:0x7fabbb8e1ab0.centerY   (active)>",
    "<NSLayoutConstraint:0x600003089ea0 'UIView-Encapsulated-Layout-Height' UITableViewCellContentView:0x7fabbb8e1ab0.height == 54.3333   (active)>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x6000030a39d0 Jetfly.Avatar:0x7fabbb8e1310.height == 34   (active)>

当我检查视图层次结构时,我可以看到 Avatar 的高度为 34,33 点。

好的,所以它显然与分隔线有关,在 11 Pro 上是 0.33 点(它是 @3x 设备,使其成为一个像素)。我明白了。但是..如何添加不会导致这些警告的约束,更重要的是,不要更改我的 Avatar 视图的高度?

【问题讨论】:

  • 内容拥抱和压缩应该永远为 1000。将它们恢复为默认值(我相信是 750 和 250)。一方面,你会与你的身高发生冲突。
  • 它们最初处于默认状态,那是我最初注意到问题的时候。所以这绝对不是原因 - 而且他们应该永远达到 1000 也是不正确的。
  • 好吧,你说你说的,我说我说的那个。
  • 仅供参考,我确实将它们恢复为默认值,因为将它们设置为 1000 并不能解决任何问题。它也没有使情况变得更糟,也没有妨碍真正的修复(将垂直间距限制之一设置为 999)。所以我很好奇你为什么说他们会和身高发生冲突?您能指出解释这一点的文章或文档吗?

标签: ios uitableview autolayout ios-autolayout


【解决方案1】:

将一个纵轴约束的优先级降低到999。我通常使用从最底部视图到内容视图底部的底部约束。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2013-10-08
    • 1970-01-01
    • 2014-10-16
    • 2015-04-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多