Brief: I have 4 controllers embedded in UINavigationController
, who are then used as tabs in UITabbarController
, (No storyboards and .xib's) through code.
Previously I was using Xcode 10.3, there were no issues but after I changed to 11.3 these issues came up.
Issues:
when I tap on the tabs, viewWillAppear, and viewDidAppear on the controllers are not getting called.
similar issue with navigation controller Xcode 11 UINavigationController Bar problems
Pop back (pressing back button) from any controller after navigating to it is not getting animated.
Code TabbarController:
final class TabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
self.viewControllers = [
TabBarItems.home.tabController,
TabBarItems.search.tabController,
TabBarItems.cart.tabController,
TabBarItems.account.tabController
]
self.tabBar.isTranslucent = false
}
}
extension TabBarController {
enum TabBarItems {
case home
case search
case cart
case account
var title: String {
switch self {
case .home:
return "Home"
case .search:
return "Search"
case .cart:
return "Bag"
case .account:
return "Account"
}
}
var tabController: UINavigationController {
switch self {
case .home:
return createNavController(viewController: HomeController(), title: self.title, imageName: Assets.home.rawValue)
case .search:
return createNavController(viewController: UIViewController(), title: self.title, imageName: Assets.search.rawValue)
case .cart:
return createNavController(viewController: BagController(), title: self.title, imageName: Assets.shoppingBag.rawValue)
case .account:
return createNavController(viewController: AccountController(), title: self.title, imageName: Assets.account.rawValue)
}
}
private func createNavController(viewController: UIViewController, title: String, imageName: String) -> UINavigationController {
let navController = UINavigationController(rootViewController: viewController)
viewController.view.backgroundColor = .white
navController.tabBarItem.title = title
navController.tabBarItem.image = imageName.image
return navController
}
}
}