gpt4 book ai didi

ios - 插入/删除顶部/底部单元格时更新旧/新顶部/底部单元格的背景 View

转载 作者:可可西里 更新时间:2023-11-01 06:16:59 26 4
gpt4 key购买 nike

这是NSFetchedResultsControllerDelegate文档中给出的模板代码:

- (void)controllerWillChangeContent:(NSFetchedResultsController *)controller {
[self.tableView beginUpdates];
}


- (void)controller:(NSFetchedResultsController *)controller didChangeSection:(id <NSFetchedResultsSectionInfo>)sectionInfo
atIndex:(NSUInteger)sectionIndex forChangeType:(NSFetchedResultsChangeType)type {

switch(type) {
case NSFetchedResultsChangeInsert:
[self.tableView insertSections:[NSIndexSet indexSetWithIndex:sectionIndex]
withRowAnimation:UITableViewRowAnimationFade];
break;

case NSFetchedResultsChangeDelete:
[self.tableView deleteSections:[NSIndexSet indexSetWithIndex:sectionIndex]
withRowAnimation:UITableViewRowAnimationFade];
break;
}
}


- (void)controller:(NSFetchedResultsController *)controller didChangeObject:(id)anObject
atIndexPath:(NSIndexPath *)indexPath forChangeType:(NSFetchedResultsChangeType)type
newIndexPath:(NSIndexPath *)newIndexPath {

UITableView *tableView = self.tableView;

switch(type) {

case NSFetchedResultsChangeInsert:
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
withRowAnimation:UITableViewRowAnimationFade];
break;

case NSFetchedResultsChangeDelete:
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
break;

case NSFetchedResultsChangeUpdate:
[self configureCell:[tableView cellForRowAtIndexPath:indexPath]
atIndexPath:indexPath];
break;

case NSFetchedResultsChangeMove:
[tableView deleteRowsAtIndexPaths:[NSArray arrayWithObject:indexPath]
withRowAnimation:UITableViewRowAnimationFade];
[tableView insertRowsAtIndexPaths:[NSArray arrayWithObject:newIndexPath]
withRowAnimation:UITableViewRowAnimationFade];
break;
}
}


- (void)controllerDidChangeContent:(NSFetchedResultsController *)controller {
[self.tableView endUpdates];
}

使用此代码,默认分组样式 TableView 使用背景 View 更改动画很好地更新其单元格:删除第一个单元格时,第二个单元格成为第一个单元格,其顶角从方形变为圆形,诸如此类。

但是,对于带有自定义backgroundView 的单元格,table view 不会为我们做相同的背景 View 转换。所以我们会看到这样的事情:

删除第一行之前Before deleting

删除第一行后After deleting

如何通过适当的背景 View 更新来恢复漂亮的动画?

最佳答案

没有内置的、简单的方法来管理分组 TableView 上具有自定义单元格背景的单元格动画。

您要么维护一个背景需要重绘的单元格列表,然后使用 [cell.backgroundView setNeedsDisplay]

或者您可以考虑屏蔽表格 View 。所以你有一个单元格背景但它们被剪掉了见Round corners on UITableView

关于ios - 插入/删除顶部/底部单元格时更新旧/新顶部/底部单元格的背景 View ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7338161/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com