UITableViewCell 动态约束
Posted
技术标签:
【中文标题】UITableViewCell 动态约束【英文标题】:UITableViewCell dynamic constraints 【发布时间】:2015-02-03 02:39:54 【问题描述】:我正在用动态高度的自定义单元格填充 UITableView。我正在使用here 描述的方法。
为简单起见,假设我的单元格包含 2 个 UILabel,如下所示。
对于 UITableView 中的所有单元格,紫色 UILabel 将保持相同的高度。在这种情况下,紫色 UILabel 比绿色 UILabel 高。我希望紫色 UILabel 底部和 contentView 底部之间的约束为 8。
但是,还有第二种情况是可能的,如下所示。
在这种情况下,紫色的 UILabel 仍然和第一种情况一样大小(尽管看起来更小,但由于整体单元格高度更大,因此看起来更小),但绿色 UILabel 大得多。在这种情况下,我希望绿色 UILabel 底部和 contentView 底部之间的约束为 8。
现在我的困境是我可以设置一个或另一个(我正在使用情节提要)。但我想不出一种同时使两者成为可能的方法。我的猜测是,您需要在运行时根据绿色 UILabel 的大小以编程方式调整约束。
有什么想法吗?
我在 Swift 中使用 XCode 6.1.1。
谢谢。
【问题讨论】:
【参考方案1】:如果紫色标签的高度始终相同,那么您应该只设置元素的height
约束,而不是将其bottom
约束设置为superview
为8。
对于绿色元素,也许您可以同时选择该元素和contentview
,并从情节提要窗口底部的“添加新约束”窗格中将它们设置为具有equal heights
。然后,选择该约束并在属性检查器中将其乘数值编辑为小于 1 的某个值。这将使元素的高度始终是父视图高度的某个百分比。你可以调整它,直到它从它下面的视图中接近所需的 8px。
【讨论】:
感谢您的评论,您说得很好,我应该设置紫色标签的高度限制。但是,使用你的绿色标签的方法,如果绿色标签很短(可能只有一行),由于 contentView 的高度被限制为绿色标签的高度,紫色标签的一部分将被切断。我想我本质上是在寻找这种逻辑: contentView 应该在绿色标签下方 8px 处,除非绿色标签比紫色标签短。在这种情况下,contentView 应该在紫色标签下方 8px。 尝试将 contentView 的底部设置为 greenView 为 8,但在属性检查器中将该约束的优先级设置为 990。然后添加另一个约束,将 contentView 的底部设置为 PurpleView 也为 8,然后进入属性检查器并将其关系从“等于”更改为“大于或等于”,将该优先级保留为 1000。现在,如果 contentView 的高度将永远低于紫色视图 8px,它将打破优先级 990 约束。 谢谢!效果很好,我不知道约束关系可以改变。我很高兴我不必以编程方式管理约束。标记为正确答案。以上是关于UITableViewCell 动态约束的主要内容,如果未能解决你的问题,请参考以下文章
使用动态高度时 UITableViewCell 的情节提要冲突约束
约束 UIImageView 高度以尊重 UITableViewCell 中的动态 UILabel 高度
1 UITableViewCell 中的 2 个动态图像查看器,如何设置约束?
在具有自动布局的 UITableViewCell 中动态调整大小的 UIWebView - 违反约束