UITableView与estimatedRowHeight弹跳
我在xib中使用autoLayout作为我的customCell,因为我希望基于文本的行具有可变的高度。
现在在我的VC.m
我正在使用这些代码行
- (void)viewdidLoad { m_tableView.tableFooterView = [[UIView alloc] initWithFrame:CGRectZero]; m_tableView.estimatedRowHeight = 97.0; m_tableView.rowHeight = UITableViewAutomaticDimension; }
这里是我的cellForRow函数
- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { static NSString *CellIdentifier = @"Cell"; CustomCell *tableCell = (NotesCell *)[tableView dequeueReusableCellWithIdentifier:CellIdentifier]; if (tableCell == nil) { NSArray *nib = [[NSBundle mainBundle] loadNibNamed:@"CustomCell" owner:self options:nil]; tableCell = [nib objectAtIndex:0]; } // Configure the cell... //This code is used to make the separator full width. Also the tableview separator insets should be set to zero tableCell.layoutMargins = UIEdgeInsetsZero; tableCell.preservesSuperviewLayoutMargins = NO; return tableCell; }
所以现在每当我更新一行时,我都会调用这些代码行
[m_tableView beginUpdates]; [m_tableView reloadRowsAtIndexPaths:[NSArray arrayWithObject:m_indexPath] withRowAnimation:UITableViewRowAnimationFade]; [m_tableView endUpdates];
当我这样做的时候,Tableview只是反弹。 我不知道什么是错的
关心Ranjit
这是因为当你重新加载你的单元格时,表格视图再次要求所有单元格的高度。 任何超出滚动位置的单元格将被要求估计的行高,如果它们与当前高度不同,则会导致单元格改变高度,您将看到表格反弹。
一旦你的单元格的高度计算出来,你应该在某处caching该值,然后实现tableView:estimatedHeightForRowAtIndexPath:
并返回单元格的实际高度,如果它们有一个而不是估计的高度。
您应该使用dequeueReusableCellWithIdentifier:forIndexPath
而不是您正在使用的版本。
你正在使用的那个将没有尺寸类,因为返回的单元格没有父类。 由于尺寸级别的变化,从xcode 6开始出现一个问题。
尝试更改为这个版本,该版本返回表格的一部分,从而inheritancesuperviews的traitCollection并帮助布局正常工作。