iOS 11 UITableView删除行动画bug

l.v*_*lev 22 uitableview ios swift ios11

tableview动画bug的视频

我有一个表格视图,可以扩展/折叠其单元格.

从iOS 11开始,tableView在插入和删除行时开始出现奇怪的行为.在动画块发生之前,contentSize已经更改,因此,在视频中,您可以看到在折叠单元格上发生错误回滚.动画看起来不对劲.

这段代码在iOS 10上完美运行.有人知道Apple方面有什么变化吗?这是一个已知的问题?

public func insertingRowsForAccordion(_ indexArray: [IndexPath], selectedRowIndex: Int) {
    beginUpdates()
    insertRows(at: indexArray, with: UITableViewRowAnimation.fade)
    endUpdates()

 // Scroll to selection after expanding children
    scrollToRow(at: IndexPath(row: selectedRowIndex, section: 0), at: UITableViewScrollPosition.top, animated: true)
}

public func removeRowsForAccordion(_ indexArray: [IndexPath]) {
    beginUpdates()
    deleteRows(at: indexArray, with: UITableViewRowAnimation.fade)
    endUpdates()
}
Run Code Online (Sandbox Code Playgroud)

小智 31

iOS 11一直存在无数问题UITableView.UITableView在我的整个应用程序中执行每个操作并执行以下操作修复了我的所有问题.

设置estimatedRowHeight,estimatedSectionHeaderHeight和,estimatedSectionFooterHeight为0.

来源:iOS 11浮动TableView标题

  • 没有解决方案在这里没有帮助,它可怕的破碎,看起来很糟糕.我正在使用自动布局和大小类的大小调整单元格.问题只发生在tableview的底部附近,可能是表的20%. (12认同)

Chu*_*ris 6

我在iOS 11上删除表格行动画时遇到了类似的问题,有时会奇怪地滚动表格单元格(iOS 10正常工作)。帮助实现该委托方法返回行高的方法是:

- (CGFloat) tableView:(UITableView *)tableView estimatedHeightForRowAtIndexPath:(NSIndexPath *)indexPath

之后,iOS 10和11都可以正常工作。


Edw*_*yer 5

在iOS 11.2中,使用标准的行操作删除一行后,动画效果很差。我只能通过在CATransaction中包装行删除和行操作消除来改善这种情况。

我首先取消了行操作,然后等待该动画完成,然后再从表格视图中删除该行。

它至少不会再绕过表格视图内容偏移,而是一个冗长的两步动画。我仍在寻找更好的解决方案。

        CATransaction.begin()
        CATransaction.setCompletionBlock({
            self.tableView.beginUpdates()
            self.myViewModel?.items?.remove(at: indexPath.row)
            self.tableView.deleteRows(at: [indexPath], with: UITableViewRowAnimation.top)
            self.tableView.endUpdates()
        })
        self.tableView.setEditing(false, animated: true)
        CATransaction.commit()
Run Code Online (Sandbox Code Playgroud)