为什么 UITableViewCell 相互重叠?
Why UITableViewCell's overlap each other?
我有一个简单的 UITableViewCell
,其中包含 UIImageView
和 3 个 UILabel
。在这里,我提供一个正常的单元格外观来深入理解问题:
如您所见,描述标签可能很长,所以我将 numberOfLines
设置为 0。但是当描述为空或太小时就会出现问题。细胞开始相互重叠。以下是描述为空或较小时的样子:
如果您注意到,图片相互重叠。我对视图的约束如下:
UIImageView
:通往superview,宽高,垂直居中
BookName(bold label on top): top and trailing to superview, leading to UIImageView
AuthorName(orange label): top to BookName, trailing to superview, leading to UIImageView
描述(灰色标签):尾部和底部到超级视图,顶部到 AuthorName 并导致 UIImageView
(书本图片)
我也提供了Content Hugging and Compression Resistance Priorities
。我只为 UILabel
提供了它们。我为描述标签设置了最小的,以便它增长和收缩。
我做了什么来解决这个问题?
我意识到如果描述为空,单元格会变小。换句话说,标签决定单元格的大小。此外,考虑到 UIImageView
仅垂直居中,我认为我的约束不正确。因此,我决定摆脱 垂直居中 UIImageView。我只为 UIImageView
设置了顶部、前导、宽度和高度约束。其他约束同上。但这没有帮助,结果如下:
如您所见,UIImageView
超出了单元格边界。我认为它发生是因为我没有为 UIImageView
提供底部约束。但我提供它用于描述。因此,下一个尝试实际上是提供底部约束。因此,我为 UIImageView
提供了顶部、左侧、底部和宽度约束。我让其他约束保持不变。最初,结果令我惊讶。以下是没有描述时单元格的外观:
看起来一切都很好(无论如何,图像太小,它试图适应单元格大小,这是由标签控制的),但是在滚动 UITableView
之后,单元格正在改变它们的大小并且不知何故更新他们的约束。这是发生的事情:
我也试过设置estimatedRowHeight
和自动尺寸,但没有用,我不认为这样可以解决问题。所以,任何帮助表示赞赏。
保持 Image view 上的约束为 superview,width,height,vertically centered。保持对书名和作者标签的约束。现在在细节标签上将约束作为作者标签的顶部,尾随到超级视图,引导或左侧到图像视图,底部到超级视图。对于 bottom to superview constraint on detail label 在 Attributes inspector 中将关系更改为大于或等于。将常量更改为您 need.I 建议增加常量并进行测试的值,直到获得所需的结果。从大约 20 或 30 开始并测试,然后将值增加到其他值,直到获得您想要的效果。在这个常数的某个值,你会得到效果。
希望这可以帮助。
注意:这是假设您的书名标签和作者标签至少有一些文字。它可能会在其他设备上失败,所以也使用大小 类 来设置不同的约束
我有一个简单的 UITableViewCell
,其中包含 UIImageView
和 3 个 UILabel
。在这里,我提供一个正常的单元格外观来深入理解问题:
如您所见,描述标签可能很长,所以我将 numberOfLines
设置为 0。但是当描述为空或太小时就会出现问题。细胞开始相互重叠。以下是描述为空或较小时的样子:
如果您注意到,图片相互重叠。我对视图的约束如下:
UIImageView
:通往superview,宽高,垂直居中BookName(bold label on top): top and trailing to superview, leading to
UIImageView
AuthorName(orange label): top to BookName, trailing to superview, leading to
UIImageView
描述(灰色标签):尾部和底部到超级视图,顶部到 AuthorName 并导致
UIImageView
(书本图片)
我也提供了Content Hugging and Compression Resistance Priorities
。我只为 UILabel
提供了它们。我为描述标签设置了最小的,以便它增长和收缩。
我做了什么来解决这个问题?
我意识到如果描述为空,单元格会变小。换句话说,标签决定单元格的大小。此外,考虑到 UIImageView
仅垂直居中,我认为我的约束不正确。因此,我决定摆脱 垂直居中 UIImageView。我只为 UIImageView
设置了顶部、前导、宽度和高度约束。其他约束同上。但这没有帮助,结果如下:
如您所见,UIImageView
超出了单元格边界。我认为它发生是因为我没有为 UIImageView
提供底部约束。但我提供它用于描述。因此,下一个尝试实际上是提供底部约束。因此,我为 UIImageView
提供了顶部、左侧、底部和宽度约束。我让其他约束保持不变。最初,结果令我惊讶。以下是没有描述时单元格的外观:
看起来一切都很好(无论如何,图像太小,它试图适应单元格大小,这是由标签控制的),但是在滚动 UITableView
之后,单元格正在改变它们的大小并且不知何故更新他们的约束。这是发生的事情:
我也试过设置estimatedRowHeight
和自动尺寸,但没有用,我不认为这样可以解决问题。所以,任何帮助表示赞赏。
保持 Image view 上的约束为 superview,width,height,vertically centered。保持对书名和作者标签的约束。现在在细节标签上将约束作为作者标签的顶部,尾随到超级视图,引导或左侧到图像视图,底部到超级视图。对于 bottom to superview constraint on detail label 在 Attributes inspector 中将关系更改为大于或等于。将常量更改为您 need.I 建议增加常量并进行测试的值,直到获得所需的结果。从大约 20 或 30 开始并测试,然后将值增加到其他值,直到获得您想要的效果。在这个常数的某个值,你会得到效果。 希望这可以帮助。
注意:这是假设您的书名标签和作者标签至少有一些文字。它可能会在其他设备上失败,所以也使用大小 类 来设置不同的约束