将UITableViewCell的垂直压缩阻力优先级设置为749

时间:2019-02-28 06:01:47

标签: ios swift uitableview autolayout constraints

enter image description here我正在制作一个具有以下约束关系的表视图单元格。

    -----------------
    |                |
    |  ____________  |
    |  |          |  |
    |  |__________|  |
    |                |
    |  ____________  |
    |  |label.    |  |
    |  |__________|  |
    |                |
    |  ____________  |
    |  |          |  |
    |  |__________|  |
    |                |
    |  ____________  |
    |  |label.    |  |
    |  |__________|  |
    |________________|

子视图如下:(视图,标签,视图,标签)。我希望单元格使用两个标签动态调整大小,例如,如果第一个标签变高,则单元格应相应变高。如果两个标签变高或变短,则单元格应相应调整大小。这两个视图应具有恒定的宽度和高度。

如果我以一个标签开始,我很好,一个标签和一个视图我都很好,一个标签和一个标签,我很好,但是如果我有2个标签和一个视图,我一放进去最后标签上的最后一个约束,自动布局会在情节提要中引发错误(运行应用程序时,我没有可见的问题)。

问题是我不想更改抗压缩性,因为我不想使任何一个标签都皱缩,也看不到为什么它们会赋予所提供的约束。

enter image description here

enter image description here

enter image description here

enter image description here

enter image description here

2 个答案:

答案 0 :(得分:1)

将最后一个标签的底部约束修改为一个常量,关系为“大于或等于”

您的代码应类似于

enter image description here enter image description here

希望这行得通

答案 1 :(得分:0)

似乎您已经正确设置了约束,情节提要板上的错误也显示出约束的微小变化,例如0.5像素。您可以删除最后一个UILabel的底部约束并重新分配,以便可以重新安排冲突的约束。它将解决此问题。

要获取动态单元格大小:

  1. UILabel的行数都设置为0。

  2. 将两个UILabel的高度约束的关系从=更新为>=

  3. 在您的代码中应用以下表委托方法

    func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
        return UITableViewAutomaticDimension
    }
    

使用UIStackView解决此问题:

您可以在堆栈视图中使用所有视图,而不必在所有视图中添加约束,只需将顶部,底部,前导和尾随约束分配给堆栈视图并保留表委托方法。我认为这将是更合适的方式。