Получение двух навигационных панелей при использовании TabBar - PullRequest
1 голос
/ 05 июля 2019

Я переписываю 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 (Извините, это по-китайски)
Я пытаюсь добавить self.navigationController?.isNavigationBarHidden = true в TabBarController.swift, но не работает.

Ответы [ 2 ]

2 голосов
/ 05 июля 2019

Вы говорите

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

Итак, вы оборачиваете контроллер навигации вокруг контроллера панели вкладок.

Но тогда вы говорите:

    viewControllers = tabBarList.map {
        UINavigationController(rootViewController: $0)
    }

Итаквы оборачиваете контроллер навигации вокруг каждого из дочерних элементов контроллера панели вкладок.

Таким образом, для каждого дочернего элемента контроллера панели вкладок вокруг него есть два контроллера навигации, один раз длякаждый раз, когда вы видите слова «UINavigationController» в коде, который я цитировал.

Так вот почему вы видите две панели навигации.У вас есть контроллер навигации внутри контроллера навигации.

Эта архитектура бессвязна и запрещена.Вы не можете размещать навигационный контроллер на любой глубине внутри навигационного контроллера.Вы должны переосмыслить всю свою архитектуру.

0 голосов
/ 05 июля 2019

У вас есть 2 навигации, одна для главной вкладкиBar, а другая для каждого дочернего элемента 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
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...