簡體   English   中英

添加 UINavigationController 作為其他 UINavigationController 的子級

[英]Adding UINavigationController as child of other UINavigationController

我正在嘗試添加一個 UINavigationController 作為另一個 UINavigationController 的子級。 我面臨的問題是子 UINavigationController 的導航欄不尊重頂部的安全區域 - 高度太小並且導航欄被凹槽覆蓋。

在下面的屏幕截圖中,黃色導航欄和視圖是子 UINavigationController 的一部分,而藍色視圖和白色導航欄是根 UINavigationController 的一部分。 子 UINavigationController 應該只覆蓋屏幕的一部分。 如果一切都按預期工作,黃色導航欄應該與白色導航欄具有相同的大小。

在此處輸入圖像描述

有人可能認為將子視圖控制器添加到 UINavigationController 不是一個好主意,但我正在開發一個可用於顯示“側邊欄”導航或抽屜的組件,它可以作為子視圖添加到任何視圖controller,任何類型。

這是一些重現我遇到的問題的代碼:

override func viewDidAppear(_ animated: Bool) {
    super.viewDidAppear(animated)
    
    self.view.backgroundColor = .blue
    self.title = "Parent"
    
    let childVC = UIViewController()
    childVC.view.backgroundColor = .yellow
    childVC.title = "Modal"
    
    let childNavController = UINavigationController(rootViewController: childVC)
    childNavController.view.translatesAutoresizingMaskIntoConstraints = false
    
    let rootNavController = self.navigationController!
    
    rootNavController.addChild(childNavController)
    rootNavController.view.addSubview(childNavController.view)
    
    NSLayoutConstraint.activate([
        childNavController.view.widthAnchor.constraint(equalToConstant: 300),
        childNavController.view.topAnchor.constraint(equalTo: rootNavController.view.topAnchor),
        childNavController.view.bottomAnchor.constraint(equalTo: rootNavController.view.bottomAnchor),
        childNavController.view.rightAnchor.constraint(equalTo: rootNavController.view.rightAnchor)
    ])
    childNavController.didMove(toParent: rootNavController)
}

正確的方法是為兩個 UINavigationControllers 創建一個共同的父級 - 只需清空 UIViewController 然后使用包含將這兩個作為子視圖控制器嵌入。

UINavigationController有一個內置的子視圖管理,當你使用它(顯示/隱藏視圖控制器)時,像這樣嵌入子視圖和子視圖控制器是有風險的。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM