0

简介:我在 中嵌入了 4 个控制器UINavigationController,然后通过代码将它们用作 中的选项卡UITabbarController(没有故事板和 .xib)。

以前我使用的是 Xcode 10.3,没有问题,但在我更改为 11.3 后,这些问题出现了。

问题:

  1. 当我点击选项卡时,控制器上的 viewWillAppear 和 viewDidAppear 没有被调用。

  2. 导航控制器Xcode 11 UINavigationController Bar 问题的类似问题

  3. 导航到任何控制器后从任何控制器弹回(按下返回按钮)都没有动画。

代码标签栏控制器:

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
        }
    }
}
4

1 回答 1

0

问题在于在 XCode 10.3 中创建的项目并试图在 XCode 11+ 中开箱即用地运行它。

在 iOS 13/XCode11 之前,应用程序的起点是,AppDelegate但现在在 Xcode 11+ 中,SceneDelegate分担了一些责任。即window配置应该在scene(:willConnectTo:)功能中完成。

我忘了为此添加 SceneDelegate.swift 和 Info.plist 键。

感谢@DonMag帮助我。

于 2020-01-03T16:25:46.280 回答