diff --git a/Tusker/Screens/Main/NewMainTabBarViewController.swift b/Tusker/Screens/Main/NewMainTabBarViewController.swift index 633e1f7244..de66081168 100644 --- a/Tusker/Screens/Main/NewMainTabBarViewController.swift +++ b/Tusker/Screens/Main/NewMainTabBarViewController.swift @@ -246,9 +246,13 @@ final class NewMainTabBarViewController: BaseMainTabBarViewController { } private func embedInNavigationController(_ vc: UIViewController) -> UIViewController { - let nav = AdaptableNavigationController() - nav.viewControllers = [vc] - return nav + if UIDevice.current.userInterfaceIdiom == .phone { + return UINavigationController(rootViewController: vc) + } else { + let nav = AdaptableNavigationController() + nav.viewControllers = [vc] + return nav + } } override func viewDidAppear(_ animated: Bool) { @@ -428,12 +432,13 @@ extension NewMainTabBarViewController: UITabBarControllerDelegate { if tab.identifier == Tab.compose.rawValue { let currentTab = selectedTab // returning false for shouldSelectTab doesn't prevent the UITabBar from being updated (FB14857254) - // but we need it to change to _something_ so that we can change back to the current tab - self.selectedTab = tab - self.selectedTab = currentTab - + // returning false and then setting selectedTab=tab and selectedTab=currentTab seems to leave things in a bad state (currentTab's VC is on screen but in the disappeared state) + // so return true, and then after the tab bar VC has finished updating, go back to currentTab + DispatchQueue.main.async { + self.selectedTab = currentTab + } compose(editing: nil) - return false + return true } else if let selectedTab, selectedTab == tab, let nav = selectedViewController as? any NavigationControllerProtocol,