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吗?我刚刚使用您的代码进行了快速测试,每次选择选项卡时都会调用viewWillAppear
和viewDidAppear
。
@DonMag 好的,我会的。
@SubhajitHalder 我已经使用 Xcode 11.3 (11C29) 检查了您的代码,正如@DonMag 所写 - 每次我选择一个选项卡时都会调用 viewWillAppear
和 viewDidAppear
@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 13.3 NavigationLink 仅推送一次
Xcode 11.3、UInavigationController 和 UITabbarController 面临的问题
applesimutils --list 在 MacOS Mojave 和 Xcode 11.3 更新后返回空列表 []