簡體   English   中英

子視圖控制器應該有父視圖控制器,但實際父視圖控制器是(UIViewControllerHierarchyInconsistency)

[英]Child view controller should have parent view controller but actual parent is (UIViewControllerHierarchyInconsistency)

我有一個將 UITabbarController 作為初始窗口的應用程序(登錄后我將其設置為 rootViewController)

這個 tabbarController 有 4 個不同的選項卡,它們都是嵌入在 UINavigationController 中的 UIViewController。

在我的 tabbarController 中,當我進行初始配置時,我設置了如下標簽:

  • 首先我創建viewControllers:

     let tableViewController1 = tableViewController1(nibName: "tableViewController1", bundle: nil) let tableViewController2 = tableViewController2(nibName: "tableViewController2", bundle: nil) let tableViewController3 = tableViewController3(nibName: "tableViewController3", bundle: nil) let profileViewController = ProfileViewController(nibName: "ProfileViewController", bundle: nil)
  • 然后我將它們嵌入到導航控制器中:

     let navController1 = UINavigationController(rootViewController: tableViewController1) let navController2 = UINavigationController(rootViewController: tableViewController2) let navController3 = UINavigationController(rootViewController: tableViewController3) let navController4 = UINavigationController(rootViewController: profileViewController)
  • 最后,將 navigationControllers 添加為 tabbarController 的 viewControllers

    viewControllers = [navController1,navController2,navController3,navController4]

我在網上查了一下,這種使用方式似乎是正確的。 例如: https ://medium.com/@ITZDERR/uinavigationcontroller-and-uitabbarcontroller-programmatically-swift-3-d85a885a5fd0。 但是我從我的實時應用程序收到崩潰日志,如下所示

Crash, child view controller:<UINavigationController: 0x160b3400>
should have parent view controller:<ProfileViewController: 0x16098800>
but actual parent is:<MyApp.MainTabBarController: 0x16064c00>

這里的問題是崩潰說profileViewController應該是navigationController的父級但是我在navigationController中嵌入了profileViewController並添加為tabbarController的viewControllers,所以在我看來這個順序是正確的。

我搜索了此崩潰,似乎我正在跳過使用 addChildViewController 或在某處刪除父級的步驟,但無法弄清楚。

我找到了與此相關的鏈接,但沒有一個幫助我解決了這個問題。

示例鏈接:

遇到同樣的問題,添加layoutifneeded()對我有用。 下面的例子:

navigationController.setViewControllers([], animated: false)
navigationController.view.layoutIfNeeded()

問題是navigaionController不會立即刪除viewControllers layoutifneeded告訴系統立即重繪。 所以不會發生崩潰。

暫無
暫無

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

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