加载更多后快速滚动到顶部不起作用

时间:2019-03-21 08:59:32

标签: ios swift uitableview

我有一个表视图,其中有更多的负载。我想在用户两次按下标签栏项(例如twitter,instagram)时向顶部功能添加滚动。

这是我的代码,当用户两次单击选项卡栏项时。

db.project
.find().forEach(function(project)
{    
    if (project.assignedTo) {
        db.user.findOne({ where: { id: project.assignedTo } })
        .forEach(function(user) {
            var userObj = {
                "username" : user.username,
                "firstName" : user.firstName,
                "lastName" : user.lastName,
                "company" : user.company,
                "country" : user.country,
                "id" : user.id
            };
            db.getCollection('project').update( 
                {"_id" : project.id}, {$addToSet : {assignedMultiple : [...project.assignedMultiple, { "_id": project.assignedTo }]}}
            )
        });
    }
});

第一次加载tableview时,它工作正常。问题是当我将更多的单元格加载到表格视图并滚动到顶部时,表格视图没有滚动到顶部,它停留在某个地方的中间。其他怪异的事情是,如果我在加载更多内容后手动滚动到顶部,选项卡栏项会正确滚动tableview直到加载更多单元格。

基本上,在加载更多操作时,应用会从服务器获取更多内容,并将其添加到数组中并调用tableview.reloadData()

    func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
      if previousController == viewController {
        if let navVC = viewController as? UINavigationController, let vc = navVC.viewControllers.first as? AssistantMainViewController {
            if vc.isViewLoaded && (vc.view.window != nil) {
                // viewController is visible
                vc.tableView.setContentOffset(CGPoint(x: 0, y: -173), animated: true)
            }
        }
    }
    previousController = viewController
}

可能的问题是当我加载更多单元格tableview时不知道其新的内容大小。顺便说一下,当轻按状态栏tableview可以完美滚动到顶部时。如果您知道用户点击状态栏时调用的函数,那对我来说就是完美的选择。

我一直在努力搜索2天,有什么帮助吗?

谢谢!

2 个答案:

答案 0 :(得分:0)

在您的viewcontroller tableView类中调用UITabBarControllerDelegate。

在viewdidload方法调用中 self.tabBarController?.delegate = self

实现标签栏在您的viewcontroller类中进行了选择

func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
    let tabBarIndex = tabBarController.selectedIndex
    if tabBarIndex == 0 {
        self.tableView.setContentOffset(CGPoint.zero, animated: true)
    }
}

答案 1 :(得分:0)

将tableView.layoutSubviews()替换为tableView.layoutIfNeeded(),它将立即布局tableview。

并使用tabbarcontrollerdelegate: viewcontroller(拥有tableview)将监听它。并使用此方法

self.primaryTableView.scrollToRow(at:IndexPath,at:UITableViewScrollPosition,动画:Bool)