数据重新加载时,iOS收藏夹视图会上移

时间:2019-08-09 16:57:58

标签: ios uitableview uicollectionview

我有一个TableView管理两行数据。每行都由一个CollectionView管理,该视图允许用户水平滚动并过滤数据。筛选器是表视图的一部分,并且在CollectionView的上方。

这是视觉效果:

enter image description here

当我单击第一行(上图中的屏幕外)中的过滤器时,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左右,则单击过滤器后,视图将正常运行。要注意的是,用户必须向下滚动到屏幕底部,否则它将表现为上面说明的那种简陋的方式。

这是布局:

enter image description here

有什么想法吗?

1 个答案:

答案 0 :(得分:0)

经过相当多的坚持,我得以找到解决此问题的方法。我的配置有两个错误。

1:当我使用此行代码tableView.reloadRows(at: [IndexPath(row: viewModel!.rowToFetch!, section: 0)], with: .none)重新加载数据时,似乎在集合视图中包含某种反弹动画。我用tableView.reloadData()代替了它,它修复了发生的大部分反弹。

2:我增加了表格视图行的大小,从而消除了其余的反弹。