我在其中一个应用中使用UITableView
。在tableview的行中,我进行了水平滚动UICollectionView
。每当用户双击集合视图的单元格时,它将事件发送回视图控制器以更新数据源。数据源更新后,我正在使用tableView.reloadRows(at: [IndexPath(row: index, section: 0)], with: .none)
重新加载该特定行,但是却出现了奇怪的滚动错误。
我想重新加载tableview的行及其内容,即collectionview的内容,而没有任何动画或滚动问题。
我尝试了以下解决方案来避免这种情况,但是没有运气:(
UIView.performWithoutAnimation {
self.tableView.reloadRows(at: [IndexPath(row: index, section: 0)], with: .none)
}
我什至试图记住tableview和collectionview的内容偏移,但是闪烁仍然存在。如果您遇到这样的问题,请指导我
答案 0 :(得分:2)
这是UI布局问题。当您重新加载单元格/节时,它会重新计算其内容大小,因此,如果您具有动态大小的单元格,则tableView内容大小特别如此。我建议2种解决方案
解决方案I(暴躁):
解决方案II(更好):
答案 1 :(得分:0)
在将图像放入单元格之前,如果可能,请创建图像的缩略图,然后滚动。
答案 2 :(得分:-1)
尝试tableView.reloadData()或您必须按升序重新排列indexPath,然后重新加载特定的indexPath。
答案 3 :(得分:-1)
所有带有UI的操作都需要在主线程异步中执行。 试试这个:
DispatchQueue.main.async {
UIView.performWithoutAnimation {
self.tableView.reloadRows(at: [IndexPath(row: index, section: 0)], with: .none)
}
}