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]; }