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