iOS8:单击单元格后调整(静态)单元格会导致错误

时间:2014-09-16 08:52:54

标签: ios objective-c uitableview

我正在尝试让我的应用iOS8准备就绪,但遇到了一个奇怪的问题。我的表使用静态单元格,但是我在代码中调整了很多东西。这个表中的一个基本功能是我的datePickerCell。这类似于Apple的日历应用程序。当您单击包含日期的单元格时,下面的单元格将调整为DatePicker的高度并显示。再次单击单元格后,它将再次调整大小并隐藏。但是,当我使用此代码时,我的应用程序崩溃并出现错误:

*** Assertion failure in -[UITableView _classicHeightForRowAtIndexPath:], /SourceCache/UIKit_Sim/UIKit-3318/UITableView.m:10772

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath {
    if(indexPath.section == 1 && indexPath.row == 2){
        if(self.datePickerEdit){
            return 164;
        } else {
            return 0;
        }
    } else if(indexPath.section == 1 && indexPath.row == 3){
        return 2 * self.tableView.rowHeight;
    } else {
        return self.tableView.rowHeight;
    }
}

-(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
    BOOL changeOfPicker = NO;

    if(indexPath.section == 1 && indexPath.row == 1){
        self.datePickerEdit = !self.datePickerEdit;
        //This is only necessary since it has to be hidden during initial load
        if(self.expenditureDatePicker.hidden) self.expenditureDatePicker.hidden = NO;
        changeOfPicker = YES;
    }

    if(changeOfPicker){
        [UIView animateWithDuration:.4 animations:^{
            [self.tableView reloadRowsAtIndexPaths:@[[NSIndexPath indexPathForRow:indexPath.row+1 inSection:indexPath.section]] withRowAnimation:UITableViewRowAnimationFade];
            [self.tableView reloadData];
        }];
    }
}

当我使用与上面相同的代码添加完整的estimatedHeightForRowAtIndexPath方法时,它仍然会崩溃。但是,如果我注释掉整个heightForRowAtIndexPath(和estimatedHeightForRowAtIndexPath),我的应用程序可以工作。但是,单元格将无法正确调整大小,这是不行的。

我该如何解决这个问题?!

0 个答案:

没有答案