UITableView分隔符由于单元格重复使用而绘制错误



我正在开发一个带有情节串连板的iOS 5项目,因此在IB中使用动态表格单元格原型。在其中一个视图中,我得到了一个具有可变高度单元格的表格视图,单元格高度根据内容的高度计算。

第一次显示表格视图时,tableView:heightForRowAtIndexPath:返回所有单元格的正确值。当向下滚动几个项目时,一切都很好,但随后出现了问题:实际的单元格似乎是正确的高度,包括它们的触摸区域,但它们的分隔符呈现在错误的位置(单元格内部而不是单元格之间)。

从测量分隔符的位置来看,似乎单元重用可能与此有关。前三个单元格的分隔符被正确渲染,但第四个单元格没有。heightForRowAtIndexPath:为它返回正确的高度(在这种情况下为125像素),并且它包含的子视图都在正确的位置。但是,分隔符仅与前一个分隔符相距108个像素,将其放置在单元格的125像素高区域内。

关键是:108px是第一个表单元格的高度,现在看不见了,可能会被重用。我没有确切的证据,但表视图似乎忽略了这些单元格的heightForRowAtIndexPath:,只是根据重用的单元格高度渲染分隔符。

这并不能解释为什么后面的一堆较短的单元格根本没有呈现为分隔符。但这就是我所要做的。

是否有变通方法、IB设置或其他可能有所帮助的方法?

我遇到了同样的问题,分隔符显示在看似随机的位置。

事实证明,问题是我正在重写layoutSubviews,但忘记调用[super layoutSubviews]。添加该调用为我解决了问题。

我也遇到了这个奇怪的问题。对于自定义表格单元格,添加图层作为分隔符可能是更好的选择。

在自定义表单元格类的initWith***方法中:

separator = [CALayer layer];
separator.backgroundColor = [UIColor colorWithWhite:0.8f alpha:1.0f].CGColor;
[self.layer addSublayer:separator];

在布局中更新分隔符的框架子视图方法:

- (void)layoutSubviews {
   CGFloat height = 1.0f;
   separator.frame = CGRectMake(0.0f, self.frame.size.height - height, self.frame.size.width, height);
   [super layoutSubviews];
}

最新更新