为什么UITableViewCell彼此重叠?

时间:2019-03-20 08:19:29

标签: ios uitableview autolayout

我有一个简单的UITableViewCell,其中包含UIImageView和3个UILabel。在这里,我提供了一个正常的单元格外观,以深入理解问题:

enter image description here

您注意到,描述标签可能​​很长,所以我将numberOfLines设置为0。但是当该描述为空或很小时,就会出现问题。单元格开始相互重叠。说明为空或较小时,外观如下: enter image description here

如果您发现,图片会相互重叠。我对视图的约束如下:

  • UIImageView:导致视图,宽度和高度,垂直居中

  • BookName(顶部的粗体标签):顶部并拖至超级视图,导致UIImageView

  • AuthorName(橙色标签):顶部为BookName,后退为超级视图,导致UIImageView

  • 说明(灰色标签):在视图的顶部和底部,到超级名,从顶部到AuthorName,最后到UIImageView(书本图像)

我还提供了Content Hugging and Compression Resistance Priorities。我只为UILabel提供了它们。我设置了最小的描述标签,以使其增大和缩小。

我为解决该问题做了什么?

我意识到,如果描述为空,则单元格会变小。换句话说,标签决定了单元格的大小。另外,考虑到UIImageView仅垂直居中的事实,我认为我的约束是不正确的。因此,我决定摆脱 UIImageView垂直居中。我仅为UIImageView设置了顶部,行距,宽度和高度约束。其他限制与上述相同。但这没有帮助,结果如下:

enter image description here

如您所见,UIImageView超出了单元边界。我以为是因为我没有为UIImageView提供底层约束。但我提供它以供描述。因此,下一个尝试实际上是提供该底部约束。因此,我提供了UIImageView的顶部,左侧,底部和宽度约束。我保留了其他限制。最初,结果令我惊讶。这是没有描述时单元格的外观: enter image description here

似乎一切都很好(无论如何,图像太小,它试图适应由标签控制的单元格大小),但是在滚动UITableView之后,单元格正在改变其大小并以某种方式更新它们的大小。约束。这是发生了什么:

enter image description here

我还尝试设置estimatedRowHeight和自动尺寸,但这并没有帮助,我也不认为问题是通过这种方式解决的。因此,感谢您的帮助。

1 个答案:

答案 0 :(得分:1)

在“图像”视图上保留约束,以导致获得超级视图,宽度,高度和垂直居中。对书名和作者标签保持原样。现在,在详细信息标签上,将约束放在作者标签的顶部,拖到超级视图,引导到或拖到图像视图, 从底部到超级视图 。对于 底部到详细标签的超级视图约束 ,在“属性”检查器中将关系更改为大于或等于。将常量更改为所需的值。我建议增加常量并进行测试,直到获得所需的结果。从20或30左右开始测试,然后将值增加到其他值,直到获得所需的效果。以该常数的某个值,您将获得效果。 希望这可以帮助。

注意:这是假定您的书名标签和作者标签至少包含一些文本。它可能会在其他设备上失败,因此也可以使用大小类来设置不同的约束条件

enter image description here