使用TabBar时获取两个导航栏

时间:2019-07-05 14:06:46

标签: swift

我重写了TabBarController:

//
//  TabBarController.swift
//  
//
//  Created by Coel on 2019/7/4.
//

import UIKit

class TabBarController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()
        let TrashListVC = TrashListViewController()
        let SearchVC = SearchViewController()
        let SettingsVC = SettingsViewController()
        TrashListVC.tabBarItem = UITabBarItem(tabBarSystemItem: .search, tag: 0)
        SearchVC.tabBarItem = UITabBarItem(tabBarSystemItem: .search, tag: 1)
        SettingsVC.tabBarItem = UITabBarItem(tabBarSystemItem: .more, tag: 2)
        let tabBarList = [SearchVC, TrashListVC, SettingsVC]
        viewControllers = tabBarList.map {
            UINavigationController(rootViewController: $0)
        }
        // Do any additional setup after loading the view.
    }
}

我在AppDelegate中称其为

import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {

    var window: UIWindow?


    func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplication.LaunchOptionsKey: Any]?) -> Bool {
        // Override point for customization after application launch.

        window = UIWindow(frame: UIScreen.main.bounds)
        window?.rootViewController = UINavigationController(rootViewController: TabBarController())
        window?.makeKeyAndVisible()
        return true
    }
}

此结果是一个双导航栏,如下所示:

enter image description here (对不起,中文)
我尝试在TabBarController.swift中添加self.navigationController?.isNavigationBarHidden = true,但不起作用。

2 个答案:

答案 0 :(得分:2)

你在说

Dashboard

因此,您要将导航控制器包装在标签栏控制器周围。

但是你在说:

window?.rootViewController = 
    UINavigationController(rootViewController: TabBarController())

因此,您正在将导航控制器包装在选项卡栏控制器的每个子控件中。

因此,对于选项卡栏控制器的每个子控件,它周围都有两个导航控制器,每次在我引用的代码中看到“ UINavigationController”一词时,就会出现一次。

这就是为什么您看到两个导航栏。您在导航控制器内部有一个导航控制器。

该体系结构是不连贯和禁止的。您不得在导航控制器内任何深度放置导航控制器。您需要重新考虑整个架构。

答案 1 :(得分:0)

您有2个导航,一个用于主tabBar,另一个用于每个子vc,以将它们都隐藏起来

1-

let nav = UINavigationController(rootViewController: TabBarController())
nav.isNavigationBarHidden = true
window?.rootViewController = nav

或仅

window?.rootViewController = TabBarController()

2-

viewControllers = tabBarList.map { item in 
   let nav =  UINavigationController(rootViewController:item)
   nav.isNavigationBarHidden = true
   return nav
}