UITabBarController 的项目未显示
Items of UITabBarController not showing
我正在尝试为我的 iOS 应用程序实现底部导航栏。但是,当我创建 tabBarItem 时,它没有显示在 TabBar 上。 TabBar 显示正确。我无法弄清楚问题出在哪里,我们将不胜感激。
如果需要任何其他信息,请给我一个标记。我的代码(简化):
AppDelegate:
class AppDelegate: UIResponder, UIApplicationDelegate, GIDSignInDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
window?.makeKeyAndVisible()
window?.rootViewController = TabBarController()
return true
}
}
TabBarController:
class TabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
let homeController = HomeController()
let navigationController = UINavigationController(rootViewController: homeController)
navigationController.title = "Home"
navigationController.tabBarItem.image = UIImage(named: "icon")
viewControllers = [homeController]
}
}
家庭控制器:
class HomeController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.tabBarController?.tabBar.isHidden = false
}
}
编辑:
我删除了代码中不重要的部分,例如评论中提到的 isLoggedIn() 函数调用,并将 MainNavigationController 更改为 TabBarController。
根据 Matts 的回答,我还在 TabBarController 中更改了这一行(但由于某种原因仍然没有显示栏项目):
viewControllers = [navigationController]
问题出在这一行:
viewControllers = [homeController]
homeController
不是 navigationController
。那么 navigationController
发生了什么?没有什么。它消失在一阵烟雾中。您创建了 navigationController
,但随后将其丢弃。
所以你所说的关于 navigationController
及其配置(包括它的标签栏项)的任何内容都没有任何效果;它不在界面中(或其他任何地方)。
这是我完整的测试代码(基于你的代码):
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
window?.makeKeyAndVisible()
window?.rootViewController = MainNavigationController()
return true
}
}
class MainNavigationController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
let homeController = HomeController()
let navigationController = UINavigationController(rootViewController: homeController)
navigationController.tabBarItem.title = "MyCoolTitle"
viewControllers = [navigationController] // not [homeController]
}
}
class HomeController: UIViewController {
}
我正在尝试为我的 iOS 应用程序实现底部导航栏。但是,当我创建 tabBarItem 时,它没有显示在 TabBar 上。 TabBar 显示正确。我无法弄清楚问题出在哪里,我们将不胜感激。
如果需要任何其他信息,请给我一个标记。我的代码(简化):
AppDelegate:
class AppDelegate: UIResponder, UIApplicationDelegate, GIDSignInDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
window?.makeKeyAndVisible()
window?.rootViewController = TabBarController()
return true
}
}
TabBarController:
class TabBarController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
let homeController = HomeController()
let navigationController = UINavigationController(rootViewController: homeController)
navigationController.title = "Home"
navigationController.tabBarItem.image = UIImage(named: "icon")
viewControllers = [homeController]
}
}
家庭控制器:
class HomeController: UIViewController {
override func viewDidLoad() {
super.viewDidLoad()
self.tabBarController?.tabBar.isHidden = false
}
}
编辑:
我删除了代码中不重要的部分,例如评论中提到的 isLoggedIn() 函数调用,并将 MainNavigationController 更改为 TabBarController。
根据 Matts 的回答,我还在 TabBarController 中更改了这一行(但由于某种原因仍然没有显示栏项目):
viewControllers = [navigationController]
问题出在这一行:
viewControllers = [homeController]
homeController
不是 navigationController
。那么 navigationController
发生了什么?没有什么。它消失在一阵烟雾中。您创建了 navigationController
,但随后将其丢弃。
所以你所说的关于 navigationController
及其配置(包括它的标签栏项)的任何内容都没有任何效果;它不在界面中(或其他任何地方)。
这是我完整的测试代码(基于你的代码):
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
var window: UIWindow?
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
window = UIWindow(frame: UIScreen.main.bounds)
window?.makeKeyAndVisible()
window?.rootViewController = MainNavigationController()
return true
}
}
class MainNavigationController: UITabBarController {
override func viewDidLoad() {
super.viewDidLoad()
let homeController = HomeController()
let navigationController = UINavigationController(rootViewController: homeController)
navigationController.tabBarItem.title = "MyCoolTitle"
viewControllers = [navigationController] // not [homeController]
}
}
class HomeController: UIViewController {
}