我有一个表格栏根视图控制器设置为导航视图控制器,视图控制器中只有一个表视图。
当我将导航栏大型标题设置为always或automatic时,当我第二次打开标签时,它会使应用程序崩溃。
错误信息如下所示:
Assertion failure in -[UITableView _addScrollViewScrollObserver:]*
Terminating app due to uncaught exception 'NSInternalInconsistencyException',
reason: 'ERROR: UIScrollView does not support multiple observers implementing _scrollViewWillEndDraggingWithVelocity:targetContentOffset:'
我不知道如何修复它。提前谢谢。
答案 0 :(得分:6)
所以当我的结构是(从上到下)时:
UINavigationController
UITabBarController
UINavigationControllers (Different tab items)
如果我删除到主NavigationController(顶部),则异常消失了! 希望他们能尽快解决。
答案 1 :(得分:1)
如果你真的必须使用封闭的navigationController,你可以设置:
[navVC.navigationBar setPrefersLargeTitles:NO];
[navVC.navigationItem setLargeTitleDisplayMode:UINavigationItemLargeTitleDisplayModeNever];
在封闭的navigationController之前添加tabBarController:
[navVC setViewControllers:@[_tabBarController]];
所以现在你使用嵌套在tabBarController中的navigationControllers上的大标题。关键是现在UIScrollView只有一个实现_scrollViewWillEndDraggingWithVelocity的观察者(navigationController)。
答案 2 :(得分:1)
您应该为父级导航控制器禁用大标题(我想您有多个标题)
self.navigationBar.prefersLargeTitles = false
答案 3 :(得分:1)
我找到了解决方案。您必须将第一个导航控制器设置为不使用大标题。
问题在于,现在UIScrollView仅具有一个实现_scrollViewWillEndDraggingWithVelocity的观察者(navigationController)。
cd ios
pod update Firebase
答案 4 :(得分:0)
我遇到了同样的问题,我通过从AppDelegate
删除此行修复了此问题:
UINavigationBar.appearance().prefersLargeTitles = true
答案 5 :(得分:0)
我认为以上所有答案并不能真正解决问题,而且过于复杂。我建议在您的UIViewController
的每个子类中启用/禁用大标题,这样它们就不会同时使用大标题。最好的方法是在viewWillAppear
和viewWillDisappear
方法中
override func viewDidLoad() {
super.viewDidLoad()
navigationItem.largeTitleDisplayMode = .always
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(animated)
navigationController?.navigationBar.prefersLargeTitles = true
}
override func viewWillDisappear(_ animated: Bool) {
super.viewWillDisappear(animated)
navigationController?.navigationBar.prefersLargeTitles = false
}