我有一个表视图,其中有更多的负载。我想在用户两次按下标签栏项(例如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天,有什么帮助吗?
谢谢!
答案 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)