Xcode 11.3、UInavigationController 和 UITabbarController 面临的问题

Posted

技术标签:

【中文标题】Xcode 11.3、UInavigationController 和 UITabbarController 面临的问题【英文标题】:Xcode 11.3, UInavigationController and UITabbarController facing issues 【发布时间】:2020-01-03 11:56:04 【问题描述】:

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

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

问题:

    当我点击选项卡时,控制器上的 viewWillAppear 和 viewDidAppear 不会被调用。

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

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

代码标签栏控制器:

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
        
    

【问题讨论】:

你能发一个minimal reproducible example吗?我刚刚使用您的代码进行了快速测试,每次选择选项卡时都会调用viewWillAppearviewDidAppear @DonMag 好的,我会的。 @SubhajitHalder 我已经使用 Xcode 11.3 (11C29) 检查了您的代码,正如@DonMag 所写 - 每次我选择一个选项卡时都会调用 viewWillAppearviewDidAppear @SubhajitHalder -- 这是我用作测试的内容:gist.github.com/DonMag/b110502a78c50749f2c73ca31d281508 -- 我所做的唯一更改是使用图像名称(而不是您的 Assets.name.rawValue)。 @DonMag 我会检查要点并让我在 10.3 中编写代码并尝试使用 11.3 运行它,如果我遇到类似问题我会告诉你,但正如你所说你做到了使用 11.3 并且可以正常工作,可能还有其他问题,会检查并通知您。 【参考方案1】:

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

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

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

感谢@DonMag 帮助我。

【讨论】:

以上是关于Xcode 11.3、UInavigationController 和 UITabbarController 面临的问题的主要内容,如果未能解决你的问题,请参考以下文章

从 Xcode 11.3 启动 iOS 模拟器并出现黑屏

Xcode 11.3 / iOS 13.3 NavigationLink 仅推送一次

Xcode 11.3 - 无法在设备上运行

Xcode 11.3、UInavigationController 和 UITabbarController 面临的问题

在 Xcode 11.3 中读取文档中的文件失败

applesimutils --list 在 MacOS Mojave 和 Xcode 11.3 更新后返回空列表 []