【问题标题】:Child controller's navigation controller conflicts in UI with parents navigation controllerUI 中子控制器的导航控制器与父导航控制器冲突
【发布时间】:2020-09-15 12:25:13
【问题描述】:

步骤:

  1. 将导航控制器嵌入到主应用程序的入口点控制器 (ViewController.swift)。
  2. 设置导航控制器的入口点。
  3. 在情节提要中添加一个额外的视图控制器并将其链接到 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)
}

结果: - 导航栏和下面的 UI 之间有额外的空间,这与视图控制器的安全区域相关。

【问题讨论】:

  • 为什么您需要为childController 使用另一个UINavigationController
  • 这是我程序的一小部分。我正在使用子控制器在其中显示对话。子控制器是我的@emrcftci 的基本控制器

标签: ios swift uinavigationcontroller viewcontroller


【解决方案1】:

如果您已经将视图控制器嵌入到导航控制器中,您应该为您的子视图控制器使用相同的视图控制器。

在您的情况下,您已经通过情节提要添加了一个导航控制器,然后在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)
    }
}

【讨论】:

    猜你喜欢
    • 2020-07-14
    • 1970-01-01
    • 2017-05-14
    • 1970-01-01
    • 2011-06-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多