具有可变行高的 UITableview 在重新排序时崩溃

Posted

技术标签:

【中文标题】具有可变行高的 UITableview 在重新排序时崩溃【英文标题】:UITableview with variable row height crashes on reorder 【发布时间】:2012-07-26 10:44:09 【问题描述】:

似乎有一个UITableView 错误,创建了简单的UITableView 并将编辑模式设置为YES,所有行都有不同的高度。例如,

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath   
    if(indexPath.row == 0)
        return 58;
    else if(indexPath.row == 1)
        return 520;
    else
        return 100;

现在开始触摸对第二行应用程序崩溃的重新排序控制。 也许这些行高强制UITableView 从底部自动滚动一个不可见的UITableViewCell,但UITableView 应该已经处理了。

任何想法......

【问题讨论】:

你用什么代码对行重新排序? - (void)tableView:(UITableView *)tableView moveRowAtIndexPath:(NSIndexPath *)sourceIndexPath toIndexPath:(NSIndexPath *)destinationIndexPath Item *item = [self.itemArray objectAtIndex:sourceIndexPath.row]; [self.itemArray removeObjectAtIndex:sourceIndexPath.row]; [self.itemArray insertObject:item atIndex:destinationIndexPath.row]; 【参考方案1】:

您需要更换它..不要删除并重新插入它..

[self.itemArray exchangeObjectAtIndex:sourceIndex
                                 withObjectAtIndex:targetIndex];
[self.tableView reloadData];

【讨论】:

即使moveRowAtIndexPath方法的主体为空,应用程序也会崩溃。但如果所有单元格的大小相同,则不会发生崩溃。 那你的数组数肯定有问题,检查一下! array.count 没有问题。

以上是关于具有可变行高的 UITableview 在重新排序时崩溃的主要内容,如果未能解决你的问题,请参考以下文章

iOS UITableView 解决估算行高和指定行高的矛盾

在 UITableView 中使用自动布局进行动态单元格布局和可变行高

在 UITableView 中使用自动布局进行动态单元格布局和可变行高

滚动 uitableview 时更改特定的 uitableviewcell 行高

如何使用 UICollectionViewCompositionalLayout 创建具有相等行高的网格布局

UITableView 手动重新排序后的动画完成通知