【发布时间】:2015-01-26 12:27:26
【问题描述】:
我正在尝试使用标签和附件类型制作自定义UITableViewCell,但添加附件会导致某些约束被破坏。
这是我的布局:
没有附件,不会发生任何不好的事情,并且日志是干净的。 当我添加附件时,标签和同步按钮之间的约束被打破了。
但是,考虑到辅助视图的宽度,元素的布局是正确的。这是来自控制台的日志:
无法同时满足约束。 以下列表中的至少一个约束可能是您不想要的。试试这个:(1)查看每个约束并尝试找出您不期望的; (2) 找到添加了一个或多个不需要的约束的代码并修复它。 (注意:如果您看到不理解的 NSAutoresizingMaskLayoutConstraints,请参阅 UIView 属性 translatesAutoresizingMaskIntoConstraints 的文档)
("<NSLayoutConstraint:0x7f9b90cbf270 H:|-(13)-[UILabel:0x7f9b90cbeb90'Top Label'] (Names: '|':UITableViewCellContentView:0x7f9b90cbe1c0 )>", "<NSLayoutConstraint:0x7f9b90cbf4f0 H:[UIButton:0x7f9b90cbd6c0'Sync']-(8)-| (Names: '|':UITableViewCellContentView:0x7f9b90cbe1c0 )>", "<NSLayoutConstraint:0x7f9b90cbf540 H:[UILabel:0x7f9b90cbeb90'Top Label']-(18)-[UIButton:0x7f9b90cbd6c0'Sync']>", "<NSLayoutConstraint:0x7f9b90cc1550 'fittingSizeHTarget' H:[UITableViewCellContentView:0x7f9b90cbe1c0(38)]>"
)将尝试通过打破约束来恢复
<NSLayoutConstraint:0x7f9b90cbf540 H:[UILabel:0x7f9b90cbeb90'Top Label']-(18)-[UIButton:0x7f9b90cbd6c0'Sync']>
在单元格中使用 AutoLayout 和附属视图的正确方式是什么?
【问题讨论】:
-
您是否尝试过移除标签和同步按钮之间的约束?除非您尝试拉伸标签,因为它具有彩色背景,否则您不需要此约束。您已经为同步按钮指定了宽度,并且标签具有基于它们包含的文本的固有内容大小宽度,因此不需要指定标签和同步按钮之间的宽度。
-
如果您需要拉伸标签,请将其内容拥抱优先级设置为低于同步按钮的优先级。
-
我只设置背景颜色以帮助查看元素的尺寸。降低拥抱优先级确实解决了问题,只要我不再设置
tableView.estimatedRowHeight。如果我设置了高度,底部标签(应该增加高度以容纳文本)将不再断线并截断文本。 -
我只是注意到,当我单击单元格时,转到第二个视图控制器并按返回,所有单元格的高度都重置为 44
-
增加第二个标签的抗压优先级可能会有所帮助。
标签: ios uitableview autolayout