具有 AccessoryType 的自定义 UITableViewCell 打破了约束

Posted

技术标签:

【中文标题】具有 AccessoryType 的自定义 UITableViewCell 打破了约束【英文标题】:Custom UITableViewCell with AccessoryType breaks constraints 【发布时间】: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)]>" )

将尝试通过打破约束来恢复&lt;NSLayoutConstraint:0x7f9b90cbf540 H:[UILabel:0x7f9b90cbeb90'Top Label']-(18)-[UIButton:0x7f9b90cbd6c0'Sync']&gt;

在单元格中使用 AutoLayout 和附属视图的正确方式是什么?

【问题讨论】:

您是否尝试过移除标签和同步按钮之间的约束?除非您尝试拉伸标签,因为它具有彩色背景,否则您不需要此约束。您已经为同步按钮指定了宽度,并且标签具有基于它们包含的文本的固有内容大小宽度,因此不需要指定标签和同步按钮之间的宽度。 如果您需要拉伸标签,请将其内容拥抱优先级设置为低于同步按钮的优先级。 我只设置背景颜色以帮助查看元素的尺寸。降低拥抱优先级确实解决了问题,只要我不再设置tableView.estimatedRowHeight。如果我设置了高度,底部标签(应该增加高度以容纳文本)将不再断线并截断文本。 我只是注意到,当我单击单元格时,转到第二个视图控制器并按返回,所有单元格的高度都重置为 44 增加第二个标签的抗压优先级可能会有所帮助。 【参考方案1】:

我不知道为什么会出现这些日志消息。 但是我能够通过停止在情节提要上设置附件视图来修复消息,但编写像cell.accessoryType = .DisclosureIndicator这样的代码。

【讨论】:

以上是关于具有 AccessoryType 的自定义 UITableViewCell 打破了约束的主要内容,如果未能解决你的问题,请参考以下文章

将单元格图像自定义为 Swift 中的 AccessoryType

UITableViewCell accessoryType.Checkmark 与我的 .Center textAlignment 混淆

自定义单元格范围之外的披露指示器

dequeueReusableCellWithIdentifier、自定义 UITableViewCell 的问题

具有权限的自定义操作

具有错误背景颜色的自定义 UITableViewCell