将 UITableViewCell 的垂直压缩阻力优先级设置为 749
Posted
技术标签:
【中文标题】将 UITableViewCell 的垂直压缩阻力优先级设置为 749【英文标题】:Set Vertical compression resistance priority to 749 for UITableViewCell 【发布时间】:2019-02-28 06:01:46 【问题描述】:我正在制作一个具有以下约束关系的表格视图单元格。
-----------------
| |
| ____________ |
| | | |
| |__________| |
| |
| ____________ |
| |label. | |
| |__________| |
| |
| ____________ |
| | | |
| |__________| |
| |
| ____________ |
| |label. | |
| |__________| |
|________________|
子视图如下:(视图、标签、视图、标签)。我希望单元格使用两个标签动态调整大小,例如,如果第一个标签变得更高,那么单元格应该相应地变得更高。如果两个标签都变高或变短,则单元格应相应调整大小。这两个视图应该具有恒定的宽度和高度。
如果我从一个标签开始我很好,一个标签和一个视图我很好,一个标签和一个标签,我很好,但是如果我有 2 个标签和一个视图,只要我放最终标签的最后一个约束,自动布局在情节提要中引发错误(运行应用程序时我没有明显的问题)。
问题是我不想改变抗压性,因为我不希望任何一个标签都被挤压,而且我不明白他们为什么会给出提供的约束。
【问题讨论】:
如果您投反对票,请说明原因。我真诚地提出了这个问题。 通过选择您的标签并执行 cmd+sht+ = 为您的标签赋予尺寸以赋予其属性。对于 tableview 单元格...在行的高度中,您可以返回 UITableView.automaticDimension。它将根据约束采用动态高度。 "通过选择您的标签并执行 cmd+sht+ = " 为您的标签赋予尺寸以赋予 fir 属性。很抱歉,不理解这一点。 对不起,我的意思是尺寸适合,行数为 0 【参考方案1】:将最后一个标签的底部约束修改为具有“大于或等于”关系的常数
你的代码应该是这样的
希望这可行
【讨论】:
哇。为什么这行得通?如何?这似乎接近解决我的问题。但是,这并不能解决我的问题,因为我希望单元格的高度由其内容确定。 你添加的约束是完美的。问题是单元格高度。 xib / Storyboard 中的单元格高度高于预期高度。这就是为什么这种改变奏效的原因。您可以根据您的计算给出高度。然后使用 tableView.rowHeight = UITableViewAutomaticDimension 很抱歉没有让你知道这个“高度比预期的高度”。【参考方案2】:您似乎已经正确设置了约束,情节提要上的错误也会显示约束的微小变化,例如 0.5 像素。您可以删除最后一个 UILabel
的底部约束并重新分配,以便可以重新排列冲突的约束。它会解决这个问题。
获取动态单元格大小:
将UILabel
的行数设置为0。
将两个 UILabel 的高度约束关系从 =
更新为 >=
在您的代码中应用下表委托方法
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat
return UITableViewAutomaticDimension
使用UIStackView
解决问题:
您可以在堆栈视图中获取所有视图,并将顶部、底部、前导和尾随约束分配给堆栈视图并保留表委托方法,而不是向所有视图添加约束。我认为这将是更合适的方式。
【讨论】:
如果我删除底部标签的底部约束然后重新分配它,仍然会抛出错误。感谢您的尝试,但这并不能解决我的问题。以上是关于将 UITableViewCell 的垂直压缩阻力优先级设置为 749的主要内容,如果未能解决你的问题,请参考以下文章
自定义 UITableViewCell 中标签的自动布局优先级
水平 UIStackView :值 999 或 1000 在水平内容压缩阻力中是不是有任何特殊含义?
在 UITableViewCell 中垂直居中右细节 UILabel