我有一个tableVIew,每个单元格高度为90.0f(高度)。我的代码;
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
return 90.0;
}
现在我删除了表格中的所有记录。单元格的高度缩小到默认值44(我认为)。
1。)我的问题是,即使用户删除了所有记录,我仍需要将单元格的高度保持为90.0f。我怎么能以编程方式做到这一点?
2。)我给了我的细胞两种颜色。
cell.contentView.backgroundColor = indexPath.row % 2 ? [UIColor whiteColor] : [UIColor blackColor] ;
当我删除第二个单元格(黑色)时,第一个和第三个单元格都是白色的。我怎么能在订单中重新安排这个黑白分明。
修改
确定这有效,但是当我尝试删除表格中的最后一条记录时[tableview indexPathsForVisibleRows]
我最终导致断言失败
-[UITableView _endCellAnimationsWithContext:], /SourceCache/UIKit_Sim/UIKit-1448.89/UITableView.m:961
和
Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'Invalid update: invalid number of rows in section 0. Attempt to delete more rows than exist in section.'
这是为什么?
CODE:
[self.tableView beginUpdates];
[self.myArray removeObjectsInArray:discardedItems ];
[self.tableView deleteRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:YES];
[self.tableView reloadRowsAtIndexPaths:[NSArray arrayWithObjects:indexPath, nil] withRowAnimation:YES];
[self.tableView endUpdates];
答案 0 :(得分:1)
1)我认为你不能那样做。一种方法是显示x个空白单元格以填充页面。
2)删除单元格后调用[tableView reloadData]
,或者在删除单元格之前和之后的行上调用[tableView reloadCellAtIndex ...]。
答案 1 :(得分:1)
如果您的行的高度非常静态(如您所示),请考虑不实施tableView:heightForRowAtIndexPath:
,而是使用表格视图的rowHeight
属性。
这可以在代码中或在Interface Builder中设置,并且应该是“如果没有”行就会缩小行的解决方案。
你的第二个问题:
你知道-[UITableView indexPathsForVisibleRows]
吗?
您可以使用此选项仅重新加载需要更新的表视图部分。它会是这样的:
- tableView:(UITableView *)table commitEditingStyle:(UITableViewCellEditingStyle)style forRowAtIndexPath:(NSIndexPath *)path
{
NSArray *visibleCellPaths = [table indexPathsForVisibleRows];
// replace this comment with whatever else needs to be done in any case...
if (style == UITableViewCellEditingStyleDelete) {
// replace this comment with the deletions of the model object
NSUInteger affectedPathIndex = [visibleCellPaths indexOfObject:path];
NSMakeRange updateRange = NSMakeRange(affectedPathIndex, [visibleCellPaths count] - affectedPathIndex);
NSArray *cellPathsToReload = [visibleCellPaths subarrayWithRange:updateRange];
// replace this comment with the bounds-checking.
// e.g. if you only had one section and the backing store was an array, it may look like this:
// while ([self.backingStore count] <= [[cellPathsToReload lastObject] row]) {
// NSUInteger remainingPathCount = [cellPathsToReload count];
// if (remainingPathCount) break;
// cellPathsToReload = [cellPathsToReload subarrayWithRange:NSMakeRange(0, remainingPathCount - 1)];
// }
[table reloadRowsAtIndexPaths:cellPathsToReload withRowAnimation:UITableViewRowAnimationFade];
}
}
答案 2 :(得分:0)
rowHeight
的{{1}}属性。 文档说明:
接收器中每行(表格单元格)的高度。