我正在尝试根据显示的文本调整 UITableViewCell 的高度。我希望完全显示文本。
我在 cellForRowAtIndexPath 中创建了一个带有特定 TEXT_CELL 标签的单元格
if ([rowType isEqualToString:kTextCell] ) {
cell = [[[MyTableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:cellIdentifier] autorelease];
// Create a text view;
UITextView *newText = [[UITextView alloc] initWithFrame:CGRectZero];
newText.backgroundColor = [UIColor blueColor];
newText.tag = kNotesTag;
newText.editable = NO;
newText.autoresizingMask = UIViewAutoresizingFlexibleRightMargin | UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
cell.contentView.autoresizingMask = UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight;
[cell.contentView addSubview:newText];
[newText release];
}
当我显示单元格时,我会使用 sizeOfFont 函数计算出显示所有文本所需的大小。然后我将该大小设置为一个变量,该变量在 heightOfCell 函数中使用。
UITextView *notes = (UITextView*) [cell viewWithTag:kNotesTag];
if (notes != nil) {
notes.text = [self.managedObject dispalyValueForKeyPath:rowKey];
// resize it to the right height
CGRect contentFrame = cell.contentView.frame;
CGSize textSize = [notes.text sizeWithFont:[UIFont systemFontOfSize:[UIFont systemFontSize]]
constrainedToSize:CGSizeMake(contentFrame.size.width, CGFLOAT_MAX)
lineBreakMode:UILineBreakModeWordWrap];
CGFloat newHeight = textSize.height + (CELL_CONTENT_MARGIN*2); //some space at the bottom
CGFloat textHeight = self.storedTextHeight;
if (textHeight != newHeight) {
[notes setFrame:CGRectMake(contentFrame.origin.x,
CELL_CONTENT_MARGIN+contentFrame.origin.y,
contentFrame.size.width, newHeight)];
self.storedTextHeight = newHeight;
// we reset the height fo the row, so reload it
[tView beginUpdates];
[tView endUpdates];
}
计算按预期进行,调用 heightForRow 并更新单元格高度。但是,我总是在 [tView endUpdates] 行获得 SIGABT。
错误消息如下。我用谷歌搜索了一堆,但不清楚为什么会这样。不创建或添加单元格。
*由于未捕获的异常“NSInternalInconsistencyException”而终止应用程序,原因:“无效更新:第 0 节中的行数无效。更新 (1) 后现有节中包含的行数必须等于其中包含的行数更新前的那个节 (2),加上或减去从该节插入或删除的行数(0 插入,0 删除),加上或减去移入或移出该节的行数(0 移入,0搬出)。'
感谢您对此的任何见解。