【发布时间】: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