UINavigationController в UITabBarController не полностью переносит UIViewController - PullRequest
0 голосов
/ 29 апреля 2019

У меня есть UITabBarController как мой rootViewcontroller, который имеет 3 UINavigationController для каждой вкладки.Каждый UINavigationController имеет начальный UIViewController, который имеет только красный цвет фона.Моя проблема в том, что UINavigationController не полностью покрывает UIViewController при первом запуске.После переключения вкладок он охватывает UIViewController.Так что же я здесь не так делаю?

Заранее спасибо.

AppDelegate:

window = UIWindow(frame: UIScreen.main.bounds)
window?.rootViewController = TabBarViewController()
window?.makeKeyAndVisible()

UITabBarController:

class TabBarViewController: UITabBarController {

    override func viewDidLoad() {
        super.viewDidLoad()

        // Navigation Tab
        let navVC = NavigationViewController()

        // Departure Tab
        let depVC = DeparturesViewController()

        // Settings Tab
        let setVC = SettingsViewController()

        self.viewControllers = [
            createNavigationController(title: "Navigation", rootViewController: navVC, imageName: "map"),
            createNavigationController(title: "Abfahrten", rootViewController: depVC, imageName: "station"),
            createNavigationController(title: "Einstellungen", rootViewController: setVC, imageName: "user"),
        ]        
    }

    private func createNavigationController(title: String, rootViewController: UIViewController, imageName: String) -> UINavigationController {

        rootViewController.title = title
        let nc = UINavigationController(rootViewController: rootViewController)
        nc.title = title
        nc.view.backgroundColor = .white
        nc.navigationBar.prefersLargeTitles = true
        nc.navigationController?.navigationItem.largeTitleDisplayMode = .always
        nc.tabBarItem.image = UIImage(named: imageName)?.withRenderingMode(UIImage.RenderingMode.alwaysTemplate)
        return nc
    }

    override func viewWillAppear(_ animated: Bool) {
        self.selectedIndex = 0
    }

}

Очень простой UIViewController:

class NavigationViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        self.view.backgroundColor = .red
    }

}

enter image description here

1 Ответ

0 голосов
/ 30 апреля 2019

После удаления следующего кода из TabBarController он полностью оборачивает Viewcontroller

override func viewWillAppear(_ animated: Bool) {
    self.selectedIndex = 0
}

Но я не могу объяснить, почему

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...