I have implemented a feature, when you press on a UITabBar
icon and viewController1
scrolls up using its UIScrollView
. It works perfectly, but if I scroll view
down and stop somewhere, then switch to another viewController2
, then get back to viewController1
and press tabBar
icon - the viewController1
will scroll up, but Large Title
will never be showed, and I should press tabBar
icon one more time to show it:
Here is a GIF with behaviour: https://i.stack.imgur.com/VfP4o.gif
The code I use for scroll up the VC1:
private var biggestTopSafeAreaInset: CGFloat = 0
override func viewSafeAreaInsetsDidChange() {
super.viewSafeAreaInsetsDidChange()
self.biggestTopSafeAreaInset = max(view.safeAreaInsets.top, biggestTopSafeAreaInset)
}
func tabBarController(_ tabBarController: UITabBarController, didSelect viewController: UIViewController) {
if tabBarController.selectedIndex == 0 {
let navigationVC = viewController as? UINavigationController
let firstVC = navigationVC?.viewControllers.first as? CurrencyViewController
guard let scrollView = firstVC?.view.subviews.first(where: { $0 is UIScrollView }) as? UIScrollView else { return }
if traitCollection.verticalSizeClass == .compact {
scrollView.setContentOffset(CGPoint(x: 0, y: -view.safeAreaInsets.top, animated: true)
} else {
scrollView.setContentOffset(CGPoint(x: 0, y: -biggestTopSafeAreaInset, animated: true)
}
}
}
I tried to track biggestTopSafeAreaInset
in different stages of VC1
life, but it always has the same number - 196.0. But then why it doesn't scroll till the Large Title
after viewControllers switch?