I have implemented large titles in my app with the following code:
if #available(iOS 11.0, *) { navigationController?.navigationBar.prefersLargeTitles = true navigationItem.largeTitleDisplayMode = .always } else { // Fallback on earlier versions } } func scrollViewDidScroll(_ scrollView: UIScrollView) { if scrollView.contentOffset.y <= 0 { if #available(iOS 11.0, *) { self.navigationItem.largeTitleDisplayMode = .always } else { // Fallback on earlier versions } } else { if #available(iOS 11.0, *) { self.navigationItem.largeTitleDisplayMode = .never } else { // Fallback on earlier versions } } self.navigationController?.navigationBar.setNeedsLayout() self.view.setNeedsLayout() UIView.animate(withDuration: 0.01, animations: { self.navigationController?.navigationBar.layoutIfNeeded() self.view.layoutIfNeeded() }) }
I am able to successfully toggle between views on a tabbar but when I push a view ontop of the tabbar controller and then pop it off using this code:
_ = self.navigationController?.popViewController(animated: true)
I get this crash when I toggle between views on the tabbar again: Terminating app due to uncaught exception 'NSInternalInconsistencyException', reason: 'ERROR: UIScrollView does not support multiple observers implementing _scrollViewWillEndDraggingWithVelocity:targetContentOffset:'