将 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

UITableViewCell 具有嵌入式垂直堆栈视图设置,具有自动布局和动态高度

在 UITableViewCell 上绘制垂直分隔符