子控制器的导航控制器在UI中与父控制器的导航控制器冲突。

问题描述 投票:0回答:1

步骤:将导航控制器嵌入到主程序的入口点控制器(ViewController.swift)中。

  1. 在主程序的入口点控制器(ViewController.swift)中嵌入一个导航控制器。
  2. 将入口点设置为导航控制器。
  3. 在storyboard中添加一个额外的视图控制器,并将其链接到ViewController1.swift文件。
  4. 在ViewController文件的IB动作中调用这个函数。
func addChildController(childController : UIViewController) {

    let navigation = UINavigationController.init(rootViewController: childController)
    navigation.view.frame = self.view.frame
    navigation.willMove(toParent: self)
    self.addChild(navigation)
    navigation.beginAppearanceTransition(true, animated: true)
    self.view.addSubview(navigation.view)
    navigation.endAppearanceTransition()
    navigation.didMove(toParent: self)
}

结果:在导航条和导航控制器之间出现了额外的空间。 - 在导航栏和下面的用户界面之间有额外的空间,这与视图控制器的安全区域相联系。

enter image description here

ios swift uinavigationcontroller viewcontroller
1个回答
1
投票

如果你已经在导航控制器中嵌入了你的视图控制器,你应该为你的子视图控制器使用同样的方法。

在你的案例中,你已经通过storyboard添加了一个导航控制器,然后在 func addChildController(childController : UIViewController) { 你又增加了一个新的导航控制器。

我认为与其使用这个 addChildController()你应该用它来推送下一个视图控制器。

extension UIViewController {
    func pushVC(vcName : String) {
        let vc = UIStoryboard.init(name: "Main", bundle: Bundle.main).instantiateViewController(withIdentifier: vcName)
        self.navigationController?.pushViewController(vc, animated: true)
    }
}
© www.soinside.com 2019 - 2024. All rights reserved.