UITableView分隔符通过单元重用绘制不正确?

我正在与故事板一起工作iOS 5项目,因此在IB中使用dynamic表格单元格原型。 在其中的一个意见,我有一个可变高度单元格的表格视图,单元格的高度从内容的高度计算。

tableView:heightForRowAtIndexPath:当第一次显示表视图时,返回所有单元格的正确值。 所有这一切都很好,当滚动几个项目,但然后有什么不对劲:实际单元格似乎是正确的高度,包括他们的触摸区域,但他们的分隔符被渲染在错误的地方(单元格之间,而不是他们之间)。

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

这里是踢球者:108px是第一个表格单元格的高度,现在看不见了,可能重用。 我没有这方面的明确证据,但似乎表视图忽略heightForRowAtIndexPath:对于这些单元格,只是根据重用的单元格高度来呈现分隔符。

这并不能解释为什么一堆后来更短的单元格根本就没有渲染分隔符。 但这是我必须继续。

是否有解决方法,IB设置或其他可能的帮助?

我也有同样的问题,分离器显示在随机的位置。

原来问题是我重写layoutSubviews但忘记调用[super layoutSubviews] 。 添加该电话解决了我的问题。

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

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

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

在layoutSubviews方法中更新分隔符的框架:

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