Fix new tab bar VC getting stuck in bad state after presenting Compose

This commit is contained in:
Shadowfacts 2024-08-21 19:28:12 -04:00
parent 230696f456
commit 4945a234e7
1 changed files with 13 additions and 8 deletions

View File

@ -246,9 +246,13 @@ final class NewMainTabBarViewController: BaseMainTabBarViewController {
} }
private func embedInNavigationController(_ vc: UIViewController) -> UIViewController { private func embedInNavigationController(_ vc: UIViewController) -> UIViewController {
let nav = AdaptableNavigationController() if UIDevice.current.userInterfaceIdiom == .phone {
nav.viewControllers = [vc] return UINavigationController(rootViewController: vc)
return nav } else {
let nav = AdaptableNavigationController()
nav.viewControllers = [vc]
return nav
}
} }
override func viewDidAppear(_ animated: Bool) { override func viewDidAppear(_ animated: Bool) {
@ -428,12 +432,13 @@ extension NewMainTabBarViewController: UITabBarControllerDelegate {
if tab.identifier == Tab.compose.rawValue { if tab.identifier == Tab.compose.rawValue {
let currentTab = selectedTab let currentTab = selectedTab
// returning false for shouldSelectTab doesn't prevent the UITabBar from being updated (FB14857254) // 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 // 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)
self.selectedTab = tab // so return true, and then after the tab bar VC has finished updating, go back to currentTab
self.selectedTab = currentTab DispatchQueue.main.async {
self.selectedTab = currentTab
}
compose(editing: nil) compose(editing: nil)
return false return true
} else if let selectedTab, } else if let selectedTab,
selectedTab == tab, selectedTab == tab,
let nav = selectedViewController as? any NavigationControllerProtocol, let nav = selectedViewController as? any NavigationControllerProtocol,