【发布时间】:2020-01-03 11:56:04
【问题描述】:
简介:我在UINavigationController 中嵌入了 4 个控制器,然后通过代码将它们用作UITabbarController 中的选项卡(没有情节提要和.xib)。
之前我使用的是 Xcode 10.3,没有问题,但是在我更改为 11.3 之后,这些问题就出现了。
问题:
当我点击选项卡时,控制器上的 viewWillAppear 和 viewDidAppear 不会被调用。
在导航到任何控制器后从任何控制器弹出(按下返回按钮)都没有动画效果。
代码标签栏控制器:
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 并且可以正常工作,可能还有其他问题,会检查并通知您。
标签: ios swift uikit xcode11 xcode11.3