UITableView重新加载数据闪烁一秒钟

时间:2018-01-18 09:16:56

标签: ios swift uitableview reloaddata

我正在UITableView上使用分页,在第一次加载后,当下一个项目即将到来时或者当我重新加载tableView时它闪烁一秒然后到达它的最后位置。但是每次遇到困难时都不会发生这种情况。有人可以帮我吗?

以下是我用于在tableView

中重新加载数据的代码
func handleWSSuccessResponse(_ arrRestaurant:[Restaurant],filterBy:filteringByValues){
    let offSet = self.IBtblUserFeed.contentOffset
    print(arrRestaurant.count)
    if (self.arrRestaurants.count > 0) {
        if arrRestaurant.count > 0 && arrRestaurant.count <= 10 {
            if arrRestaurant.count % 10 != 0 {
                isDataLoading = false

                actInd.stopAnimating()
            }
            if !(self.isFromRefresh) {
                self.arrRestaurants = self.arrRestaurants + arrRestaurant
            }
            DispatchQueue.main.async {
                if (self.isFromRefresh) {
                    self.IBtblUserFeed.reloadData()
                } else {
                    UIView.setAnimationsEnabled(false)
                    self.IBtblUserFeed.reloadData()
                    UIView.setAnimationsEnabled(true)
                    self.IBtblUserFeed.layoutIfNeeded()
                    self.IBtblUserFeed.setContentOffset(offSet, animated: false)
                }
            }
        } else {
            isDataLoading = false

            DispatchQueue.main.async {
                if (self.isFromRefresh) {
                    self.IBtblUserFeed.reloadData()
                } else {
                    UIView.setAnimationsEnabled(false)
                    self.IBtblUserFeed.reloadData()
                    self.IBtblUserFeed.layoutIfNeeded()
                    self.IBtblUserFeed.setContentOffset(offSet, animated: false)
                    UIView.setAnimationsEnabled(true)
                }
            }
        }
    } else {
        self.arrRestaurants = arrRestaurant

        if arrRestaurant.count % 10 != 0 {
            isDataLoading = false
            actInd.stopAnimating()
        }

        if self.arrRestaurants.count == 0 {
            self.IBtblUserFeed.tableHeaderView = nil
            self.IBtblUserFeed.tableHeaderView?.isHidden = true
        } else {
            if filterBy.isFiltering{
            } else {
                self.IBtblUserFeed.tableHeaderView = self.header()
            }

            self.IBtblUserFeed.tableHeaderView?.isHidden = false
        }

        if filterBy.isFiltering{
            self.reloadTableView()
            // tejas changes
            // filterRestaurant(filterBy: filterBy)
        }else{
            self.reloadTableView()
        }
    }
}

1 个答案:

答案 0 :(得分:0)

你的示例代码太混乱了无关紧要的事情,无法给出可靠的答案;但是,我认为这个问题与reloadData的使用有关;您应该使用insertRows(at:with:)来获得平滑的追加行。

因此,每当您将餐厅模型对象附加到您的数组时(从代码看起来您​​从未应用其他更改,如修改或删除),生成新行的索引路径...

let indexPaths = (countBeforeAdding..<countAfterAdding).map { IndexPath.init(row: $0, section: 0) }

...并将它们插入表格视图中:

tableView.beginUpdates()
tableView.insertRows(at: indexPaths, with: .automatic)
tableView.endUpdates()