UITableView分隔线在显示方面不稳定

时间:2014-04-25 02:09:20

标签: ios objective-c uitableview

我有自定义UITableViewCells的表格视图,可以在触摸时展开和收缩(显示信息)。不幸的是,取决于相互作用的位置,一些细胞分离器(在细胞框架的顶部/底部)消失。它使它们看起来好像两个单元格已经连接成一个。

以下是我认为相关的代码(如果需要更少/更多,请告诉我):

- (void) tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    DynamicTableViewCell *selectedCell = (DynamicTableViewCell *)[tableView cellForRowAtIndexPath:indexPath];
    Trinomial *currentTri = [self.fetchedResultsController objectAtIndexPath:indexPath];
    switch (currentTri.cellDetailActive) {
    case YES:

        selectedCell.detailLabel.hidden = YES;
        [selectedCell setSelected:NO animated:YES];
        currentTri.cellDetailActive = NO;
        [tableView beginUpdates];
        [tableView endUpdates];

        break;
    case NO:

        selectedCell.detailLabel.hidden = NO;
        [selectedCell setSelected:NO animated:YES];
        currentTri.cellDetailActive = YES;
        [tableView beginUpdates];
        [tableView endUpdates];

        break;

    default:
        NSLog(@"Serious application error. BOOLEAN contains no value in -[tableView:didSelectRowAtIndexPath:]");
        break;
  }
}

以下是设置行高的方法:

- (CGFloat) tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {

Trinomial *tri = [self.fetchedResultsController objectAtIndexPath:indexPath];

if (!tri.cellDetailActive)
    return 55;
else
    return 110;
}

我的问题图片发布在下面。过程是单元格保存一个属性,告诉我是否显示详细信息,然后更改单元格高度(通过-[beginUpdates:]-[endUpdates:]),然后隐藏或取消隐藏某些视图,具体取决于最后的显示模式。

Missing separator between collapsed cells Missing separator between expanded cells Separator present between collapsed cells Separator present between expanded cells

如果我需要澄清/详述任何信息或提供任何其他材料,请告诉我。在此先感谢您的帮助!!

修改 不知何故,我将这个方法的两个版本合并在一起,其中有不正确的代码。 -[tableView:didSelectRowAtIndexPath:]应该如何工作是收到的Core Data抓取结果控制器中有一个对象,其中包含一个名为cellDetailActive的属性,用于检查单元格是否已扩展。我抱歉,单元格没有cellDetailActive属性。

编辑#2: 好的,我向Apple Bug Reporter(#17295019)提交了一个标题为&#34的错误;表格视图细胞分离器随着细胞高度的变化而消失"。好吧,这个标题有点误导,因为Apple的开发人员回到我身边并说因为-[setSelected:animated]直接在一个表视图单元格上调用,所以我遇到了分隔符问题。相反,建议在我的switch语句中使用[tableView selectRowAtIndexPath:animated:scrollPosition]以及[tableView deselectRowAtIndexPath:animated]

1 个答案:

答案 0 :(得分:1)

我认为这只是一个错误。我解决它的方法是将分隔符设置为None并绘制我自己的单元格背景,其中包含一个用作分隔符的行。