【问题标题】:iOS > 8: issue with UITableViewAutomaticDimension and layoutIfNeedediOS > 8:UITableViewAutomaticDimension 和 layoutIfNeeded 的问题
【发布时间】:2015-07-14 09:44:47
【问题描述】:

基于this SO post,我更新了我的 TableViewControllers 以在填充我的自定义 tableviewcells 后始终调用 layoutIfNeeded。事实上,这是使用多个多行标签正确渲染单元格的唯一方法。

现在单元格呈现正确,但我的控制台充斥着我无法修复的损坏的约束消息。

例如:

(
"<NSLayoutConstraint:0x167c1f20 UILabel:0x166bf820'Intendant des Wolfgang Bo...'.leading == UITableViewCellContentView:0x167b6de0.leadingMargin>",
"<NSLayoutConstraint:0x167c44b0 UILabel:0x166bf820'Intendant des Wolfgang Bo...'.trailing == UITableViewCellContentView:0x167b6de0.trailingMargin>",
"<NSLayoutConstraint:0x167c0af0 'UIView-Encapsulated-Layout-Width' H:[UITableViewCellContentView:0x167b6de0(0)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x167c44b0 UILabel:0x166bf820'Intendant des Wolfgang
Bo...'.trailing == UITableViewCellContentView:0x167b6de0.trailingMargin>

其中一个麻烦的单元格看起来很简单:

约束和拥抱优先级/压缩阻力似乎设置正确:

我尝试了一切,从在我的 CustomCell 中实现 init:coder/awakeFromNib/layoutSubviews 等,并将自动调整大小设置为 UIViewAutoresizing.FlexibleWidth and UIViewAutoresizing.FlexibleHeight 还设置了contentView.frame = self.bounds,如 SO 上的几篇文章中所述,例如this one,但似乎没有任何效果。在“损坏”的约束上使用 >= 约束也无济于事。

这是另一个帮助某人找到快速解决方案的示例:

(
    "<NSLayoutConstraint:0x1624f800 H:[UILabel:0x16143b60'27. April 2015 \U00b7 spiegell...']-(8)-|   (Names: '|':UITableViewCellContentView:0x1616f1b0 )>",
    "<NSLayoutConstraint:0x14f022e0 H:|-(8)-[UILabel:0x16143b60'27. April 2015 \U00b7 spiegell...']   (Names: '|':UITableViewCellContentView:0x1616f1b0 )>",
    "<NSLayoutConstraint:0x14d95bf0 'UIView-Encapsulated-Layout-Width' H:[UITableViewCellContentView:0x1616f1b0(0)]>"
)

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x1624f800 H:[UILabel:0x16143b60'27. April 2015 · spiegell...']-(8)-|   (Names: '|':UITableViewCellContentView:0x1616f1b0 )>

老实说,怎么了?

【问题讨论】:

  • 您是否为一项设置了“宽度”、“尾随”和“前导”约束?
  • 对于他们两个。抱歉,如果这还不够清楚。所以日期标签对 textlbl 有顶部、前导、尾随和垂直间距,而 textlbl 也有前导和尾随但底部而不是顶部。
  • 您是否也将其中一个或两个都设置为静态宽度?
  • 不,我没有。我为什么要这么做?唯一的“静态”值是单元格高度,如果在 Storyboard 中调整为 44 以外的任何值,则会自动设置该值。
  • 说“静态宽度”是指设置宽度约束。日志说它打破了 trailingMargin 约束,因为您设置的约束不令人满意。

标签: ios uitableview swift uitableviewautomaticdimension


【解决方案1】:

您不是很清楚,但是如果您尝试解决的问题是消除控制台中的警告,那么可以通过更改自动布局中断的标签约束的优先级来解决999.

【讨论】:

  • 很抱歉,但这不是我正在寻找的解决方案,因为它只是规避了实际问题。我想找出为什么约束被打破,以便正确布局视图并解决问题。您的解决方案很老套,并没有真正的帮助..
  • :) 它一点也不 hacky。这是在 SO 上针对与此相关的几个问题发布的解决方案。这里以stackoverflow.com/a/25795758/4815066 为例,并阅读一些 cmets。
猜你喜欢
  • 2016-04-07
  • 1970-01-01
  • 2014-11-19
  • 2017-03-06
  • 2016-06-15
  • 1970-01-01
  • 1970-01-01
  • 2015-07-14
  • 1970-01-01
相关资源
最近更新 更多