我有一张桌子,其中UITableViewAutomaticDimension
开启以自动计算每个单元格的高度。自动布局已打开。
该表包含自定义单元格。这些单元格中的每一个都包含图像(UIImageView
)
第一次显示表格时,屏幕上可见的图像会垂直拉伸。
其余图像都可以(没有拉伸)。 如果我向下滚动(这样第一张图像变得不可见)并向上滚动再看一遍,那么图像将变为正常(未拉伸)
由于某种原因,iOS似乎无法正确计算第一张图像的高度。
你见过类似的东西吗?你知道怎么解决吗?我尝试为UIImageView使用不同的模式(Aspect Fit,Aspect Fill)。我可以让它正确地看。然而,细胞本身仍然被拉伸(比它应该高得多)。
P.S。我试图创建一个单独的项目来在干净的环境中复制这个问题,但我找不到导致错误的东西。
答案 0 :(得分:2)
听起来这可能是因为UIImageView中的原始图像开始时具有较大的尺寸,然后UITableViewAutomaticDimension
变得混乱。您是否尝试过为每一行使用相同的图片或使用符合UIImageView
尺寸的较小图片?
你说
如果我向下滚动(使第一张图像变得不可见)并向上滚动再看一遍,那么图像将变为正常(未拉伸)
这很可能是因为tableview通过UITableView
的{{1}}重复使用单元格,这意味着每次要显示一个单元格时,不是重新创建一个新单元格,而是从堆栈中获取一个单元格。已创建单元格并使用该单元格(主要用于节省内存)。此外,这可能是由自动布局问题引起的(可能是没有设置约束或存在约束重叠,XCode尝试通过破坏一个或多个约束来解决问题)
此外,您从未说明问题是针对dequeueReusableCellWithIdentifier
还是Objective-C
。
答案 1 :(得分:0)
首先,确保必须设置附加到单元格容器视图的所有左,右,底部和顶部约束,以便自动布局可以完成其工作
其次,您必须将estimatedRowHeight设置为不同于0的值。如果不这样做,自动布局将不会计算单元格的高度。
// Something like this should be fine
tableView.estimatedRowHeight = 44.0