Ios UITableView分隔符是否因单元格重复使用而绘制错误?

Ios UITableView分隔符是否因单元格重复使用而绘制错误?,ios,uitableview,reuseidentifier,heightforrowatindexpath,Ios,Uitableview,Reuseidentifier,Heightforrowatindexpath,我正在做一个iOS 5项目,它有故事板,因此在IB中使用了动态表格单元原型。在其中一个视图中,我得到了一个表格视图,其中包含可变高度的单元,单元高度是根据内容的高度计算出来的 tableView:heightForRowAtIndexPath:在第一次显示表视图时返回所有单元格的正确值。向下滚动几个项目时一切正常,但随后出现了一些问题:实际单元格的高度(包括其触摸区域)似乎是正确的,但其分隔符呈现在错误的位置(单元格内而不是单元格之间) 从测量分隔符的位置来看,单元重用似乎与此有关。前三个单元格

我正在做一个iOS 5项目,它有故事板,因此在IB中使用了动态表格单元原型。在其中一个视图中,我得到了一个表格视图,其中包含可变高度的单元,单元高度是根据内容的高度计算出来的

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

从测量分隔符的位置来看,单元重用似乎与此有关。前三个单元格的分隔符渲染正确,但第四个单元格的分隔符渲染不正确
heightforrowatinexpath:
返回它的正确高度(本例中为125像素),并且它包含的子视图都位于正确的位置。但是,分隔符仅渲染前一个分隔符的108个像素,将其放置在单元的125像素高的区域内

这里有一个要点:108px是第一个表格单元格的高度,现在看不见了,可能会重复使用。我没有确切的证据,但表视图似乎忽略了这些单元格的
heightforrowatinexpath:
,只是根据重用的单元格高度呈现分隔符

这并不能解释为什么一堆稍后的、较短的单元格根本不是渲染分隔符。但这就是我要做的


是否有解决方法、IB设置或其他可能有用的东西?

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

在自定义表格单元格类的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];
}

我也遇到了同样的问题,分离器显示在看似随机的位置


问题是我覆盖了
layoutSubviews
,但忘记调用
[super layoutSubviews]
。添加那个电话为我解决了这个问题。

我放弃了。我最终从表视图属性中禁用了分隔符,并在单元原型的底部添加了一个1px高的视图作为分隔符。现在至少看起来不错。我仍然想知道为什么它行为不端,所以答案仍然非常受欢迎。我的可变高度桌面视图也有这个问题。。。我是通过编程来完成的。哦,好吧,至少我不需要这些行,但它仍然令人困惑:/只是确认一件事,您正在使用tableView分隔符或添加一个line/UIView作为分隔符?向上投票是有帮助的,但我现在保留已解决的复选标记,以防有人对行为本身有解释。