我有一个TableView管理两行数据。每行都由一个CollectionView管理,该视图允许用户水平滚动并过滤数据。筛选器是表视图的一部分,并且在CollectionView的上方。
这是视觉效果:
当我单击第一行(上图中的屏幕外)中的过滤器时,ui会平滑地更新数据。但是,当我单击第二行的过滤器时,集合视图会短暂地向上移动,然后又向下移动到正确的位置。
我非常有信心这个问题与我的界面生成器配置有关,但就记录而言,这是重新加载集合视图的代码。
false
这是TableView配置:
func onFetchCompleted() {
if shouldRefreshRow() {
//tableView.reloadData() // reload all rows
tableView.reloadRows(at: [IndexPath(row: viewModel!.rowToFetch!, section: 0)], with: .none)
}
}
func shouldRefreshRow() -> Bool {
return self.viewModel?.businessesStore[viewModel!.rowToFetch!].previousPage == 1
}
在界面构建器中,我将表视图的前导,尾部和底部约束相对于超级视图设置为0,相对于表视图上方的视图设置为顶部0(上图中的实心黑色)。
我可以肯定这是一个界面生成器问题,因为如果删除底部约束并将TableView的高度设置为400左右,则单击过滤器后,视图将正常运行。要注意的是,用户必须向下滚动到屏幕底部,否则它将表现为上面说明的那种简陋的方式。
这是布局:
有什么想法吗?
答案 0 :(得分:0)
经过相当多的坚持,我得以找到解决此问题的方法。我的配置有两个错误。
1:当我使用此行代码tableView.reloadRows(at: [IndexPath(row: viewModel!.rowToFetch!, section: 0)], with: .none)
重新加载数据时,似乎在集合视图中包含某种反弹动画。我用tableView.reloadData()
代替了它,它修复了发生的大部分反弹。
2:我增加了表格视图行的大小,从而消除了其余的反弹。