我有一个自定义表视图&amp;选中时单元格扩展的单元格。它现在正常运作并相应地运作。但是,当我选择要扩展它们的细胞时,响应需要大约半秒钟。下面的代码位于didSelectRowAtIndexPath中。 我的假设是在beginUpdates和endUpdates之间,有太多事情要继续增加原始单元格的高度,然后更新整个表格视图。还有另一种方法可以更好地实现它吗?< / p>
**[_tableView beginUpdates];**
ReviewTestTableCell *reviewCell1 = (ReviewTestTableCell *)[tableView cellForRowAtIndexPath:indexPath];
CGRect rect = CGRectMake(reviewCell1.review.width, 900, reviewCell1.review.width, 900);
CGRect textRectb = [reviewCell1.review textRectForBounds:rect limitedToNumberOfLines:1000];
float labelHeight = textRectb.size.height;
reviewCell1.review.height = labelHeight;
expandHeight = labelHeight + 75 ;
if ([[userdefaults objectForKey:@"merchantType"] isEqual:@"T"])
{reviewCell1.height = labelHeight + 50;
reviewCell1.bottomRatingView.height = reviewCell1.bottomRatingView.height - 20;
}
else
{
reviewCell1.height = labelHeight + 75;}
reviewCell1.bottomRatingView.hidden = NO;
reviewCell1.bottomRatingView.top = reviewCell1.review.bottom;
**[_tableView endUpdates];**
[_isExpandList replaceObjectAtIndex:indexPath.row withObject:@1];
}
EDIT / ADD:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
UITableViewCell *cell3 = [self tableView:tableView cellForRowAtIndexPath:indexPath];
if ([_isExpandList[indexPath.row] isEqual: @1] && [[_dataList objectAtIndex:indexPath.row] valueForKey:@"Item1Score"] != nil) {
return cell3.height + 3 + 65;
}
else if ([_isExpandList[indexPath.row] isEqual: @0])
{
return cell3.height +5;
}
else return cell3.height +3;
}
答案 0 :(得分:0)
你不应该经历那种试图手动扩展细胞的精巧舞蹈。您当然不应该手动拨打willDisplayCell
。
使用this question答案中描述的方法,您应该有一个属性或某些东西来跟踪选择了哪个单元格并使heightForRowAtIndexPath:
方法针对该特定indexPath进行调整,然后调用
[tableView beginUpdates];
[tableView endUpdates];
对于每个单元格将调用heightForRowAtIndexPath
,当您的方法与所选行匹配时,您的方法将为其提供更大的高度。 tableView将平滑地调整单元格的高度。
类似于:
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
if ([self.selectedIndexPath isEqual:indexPath]) {
return 80.0f;
}
return tableView.rowHeight;
}