【发布时间】:2019-07-12 10:03:12
【问题描述】:
我在我的一个应用程序中使用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 的内容偏移,但闪烁仍然存在。如果您遇到此类问题,请指导我
【问题讨论】:
-
向我们展示“奇怪”的滚动错误
-
它从顶部滚动并返回到上一个位置或之前可见的行。
-
如果您想更新该行,请不要重新加载它 - 您知道该单元格可能是可见的,因为用户只是与它进行了交互。使用
cellForRow(at:)检索单元格并更新它。如果您在尝试检索单元格时收到nil,请继续前进,因为该单元格不在屏幕上,下次出现时会更新 -
你不认为这样的实现会有出队问题吗?
-
不,单元格要么在屏幕上,在这种情况下你可以直接更新它,或者它不在屏幕上,在这种情况下你不需要做任何事情 - 注意,我在说关于调用
UIITableView函数cellForRow(at:),而不是你已经实现的数据源方法。
标签: ios swift uitableview uicollectionview uicollectionviewcell