使用UITableViewAutomaticDimension时UIImageView伸缩不正确

时间:2015-11-17 22:37:42

标签: ios uitableview uiimageview

我有一张桌子,其中UITableViewAutomaticDimension开启以自动计算每个单元格的高度。自动布局已打开。

该表包含自定义单元格。这些单元格中的每一个都包含图像(UIImageView

第一次显示表格时,屏幕上可见的图像会垂直拉伸。

其余图像都可以(没有拉伸)。 如果我向下滚动(这样第一张图像变得不可见)并向上滚动再看一遍,那么图像将变为正常(未拉伸)

由于某种原因,iOS似乎无法正确计算第一张图像的高度。

你见过类似的东西吗?你知道怎么解决吗?

我尝试为UIImageView使用不同的模式(Aspect Fit,Aspect Fill)。我可以让它正确地看。然而,细胞本身仍然被拉伸(比它应该高得多)。

P.S。我试图创建一个单独的项目来在干净的环境中复制这个问题,但我找不到导致错误的东西。

2 个答案:

答案 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