Xcode 11.3、UInavigationController和UITabbarController面临的问题
Xcode 11.3, UInavigationController and UITabbarController facing issues
简介: 我在 UINavigationController
中嵌入了 4 个控制器,然后在 UITabbarController
中用作选项卡,(没有故事板和 .xib)通过代码。
之前我用的是Xcode 10.3,没有问题,但是我换到11.3后就出现了这些问题。
问题:
当我点击选项卡时,控制器上的 viewWillAppear 和 viewDidAppear 没有被调用。
导航控制器有类似问题Xcode 11 UINavigationController Bar problems
导航到任何控制器后弹出(按后退按钮)没有动画。
代码 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
}
}
}
问题出在 XCode 10.3 中创建的项目,并试图 运行 在 XCode 11+ 中开箱即用。
在 iOS13/XCode11 之前,应用程序的起点是 AppDelegate
,但现在 Xcode11+,SceneDelegate
分享了一些的责任。即 window
配置应该在 scene(:willConnectTo:)
函数中完成。
我忘记为此添加 SceneDelegate.swift 和 Info.plist 键。
感谢 @DonMag 帮助我。
简介: 我在 UINavigationController
中嵌入了 4 个控制器,然后在 UITabbarController
中用作选项卡,(没有故事板和 .xib)通过代码。
之前我用的是Xcode 10.3,没有问题,但是我换到11.3后就出现了这些问题。
问题:
当我点击选项卡时,控制器上的 viewWillAppear 和 viewDidAppear 没有被调用。
导航控制器有类似问题Xcode 11 UINavigationController Bar problems
导航到任何控制器后弹出(按后退按钮)没有动画。
代码 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
}
}
}
问题出在 XCode 10.3 中创建的项目,并试图 运行 在 XCode 11+ 中开箱即用。
在 iOS13/XCode11 之前,应用程序的起点是 AppDelegate
,但现在 Xcode11+,SceneDelegate
分享了一些的责任。即 window
配置应该在 scene(:willConnectTo:)
函数中完成。
我忘记为此添加 SceneDelegate.swift 和 Info.plist 键。
感谢 @DonMag 帮助我。