Ios 为什么使用UITableViewCell';它彼此重叠吗?
我有一个简单的Ios 为什么使用UITableViewCell';它彼此重叠吗?,ios,uitableview,autolayout,Ios,Uitableview,Autolayout,我有一个简单的UITableViewCell,其中包含UIImageView和3个UILabel。在这里,我提供了单元格的正常外观,以深入了解问题: 正如您所注意到的,描述标签可能很长,因此我将numberOfLines设置为0。但当描述为空或小时,问题就会出现。细胞开始相互重叠。以下是描述为空或小时的外观: 如果你注意到的话,图片相互重叠。我对视图的限制如下: UIImageView:指向superview,宽度和高度,垂直居中 BookName(顶部的粗体标签):顶部和尾部到super
UITableViewCell
,其中包含UIImageView
和3个UILabel
。在这里,我提供了单元格的正常外观,以深入了解问题:
正如您所注意到的,描述标签可能很长,因此我将numberOfLines
设置为0。但当描述为空或小时,问题就会出现。细胞开始相互重叠。以下是描述为空或小时的外观:
如果你注意到的话,图片相互重叠。我对视图的限制如下:
:指向superview,宽度和高度,垂直居中UIImageView
- BookName(顶部的粗体标签):顶部和尾部到superview,导致
UIImageView
- AuthorName(橙色标签):顶部到BookName,尾部到superview,导致
UIImageView
- 描述(灰色标签):尾随和底部到superview,顶部到AuthorName,并导致
(书籍图像)UIImageView
内容拥抱和抗压缩优先级
。我只为UILabel
提供了它们。我为描述标签设置了最小值,以使其增长和收缩
我做了什么来解决这个问题?
我意识到如果描述为空,单元格就会变小。换句话说,标签决定单元格的大小。另外,考虑到UIImageView
仅垂直居中,我认为我的约束是不正确的。因此,我决定放弃将UIImageView垂直居中。我仅为UIImageView
设置顶部、前导、宽度和高度约束。其他约束条件与上述相同。但这没有帮助,结果如下:
如您所见,UIImageView
超出单元格边界。我认为这是因为我没有为UIImageView
提供底部约束。但我提供它是为了描述。因此,下一次尝试实际上是提供底部约束。因此,我为UIImageView
提供了顶部、左侧、底部和宽度约束。我保留了其他相同的约束条件。起初,结果令我惊讶。以下是没有描述时单元格的外观:
看起来,一切都很好(无论如何,图像太小,它试图适应单元格大小,这是由标签控制的),但在滚动UITableView
后,单元格正在更改其大小并以某种方式更新其约束。发生的情况如下:
我还尝试设置
estimatedRowHeight
和自动尺寸标注,但没有帮助,我认为问题无法通过这种方式解决。因此,我们非常感谢您的帮助 将图像视图上的约束保持为超视图、宽度、高度和垂直居中。保持对书名和作者标签的约束不变。现在在细节标签上,将约束设置为从上到作者标签,从后到superview,从前到左到图像视图,从下到superview。对于细节标签上的“从底部到超级视图”约束,将“属性检查器”中的“关系”更改为“大于或等于”。将常数更改为所需的值。我建议增加常数并进行测试,直到得到所需的结果。从20或30左右开始测试,然后将值增加到其他值,直到获得想要的效果。在这个常数的某个值上,你会得到效果。
希望这有帮助
注意:这是假设您的书名标签和作者标签至少有一些文本。它可能在其他设备上失败,因此也可以使用大小类来设置不同的约束
为您的描述标签设置高度约束,并将其>=设置为不会生成图像剪辑的值。谢谢!我会接受你的回答,但你是如何想出解决办法的呢?你是如何猜到改变关系和常数会起作用的?你说“也可以使用大小类来设置不同的约束”是什么意思?@abay细节标签是通过你原来的关系约束设置“相等”附加到单元格底部的。在这种情况下,假设是20。因此,在任何时候,详图标签底部和超级视图底部之间的距离都将保持在20。这可能会导致图像超出单元格的范围。当您说大于或等于并提供某个常量值时,假设为30,则详图标签底部和超级视图之间的距离永远不会小于30。它不会低于30,反过来单元格也不会变短,从而使图像保持在它的范围内。@abay简而言之,你说我的单元格不应该变短于某个特定值,当你说,“细节标签底部和superview底部之间的约束关系大于或等于。@可以想象约束关系等于且常量值为20。”。在这种情况下,距离必须始终为20。现在图像需要固定高度。单元格的高度必须最小,才能将图像保持在其边界内。当详图标签没有文本时,其高度为“0”。它将电池底部向上拉,以根据常数保持20的距离。拉起时,单元格的高度可能会小于使图像保持在边界内所需的最小高度。结果,图像超出了边界。