以编程方式在iOS 13的不可见视图之间导航

时间:2019-09-30 08:40:08

标签: swift xcode ios13

我有几个标签。在当前选项卡中打开设置视图时,我也希望在其他选项卡中也打开设置视图。关闭时,我想获得相同的行为。
而我做到了。当我打开设置时,我使用segue方法:

navControllers.forEach { navController in navController.topViewController!.performSegue(withIdentifier: "showSettings", sender: nil) }

我关闭时使用:

navControllers.forEach { navController in navController.popViewController(animated: false) }

一切都很完美,直到最近更新了Xcode和快速版本。
此后,我开始在控制台中收到有关“关闭代码”的运行时警告消息:

  

UITableView被告知布局其可见单元格和其他内容   而不属于视图层次结构(表视图或其其中之一)   超级视图尚未添加到窗口)

在调试器中检查视图层次结构后,我发现它实际上对设置表视图大吼大叫!视图“不在视图层次结构中”似乎是由于关闭而不再存在的视图!
它看起来确实像系统错误。但是我该如何绕过呢?非常令人沮丧。

3 个答案:

答案 0 :(得分:2)

仅需注意,我还发现,如果您调用File.AppendAllText(logPath, "some text" + Environment.NewLine); ,并将代码粘贴到其中,它也将起作用,而不必从超级视图中删除该元素。

例如:

DispatchQueue.main.async

在本苹果论坛结束时找到了解决方案:https://forums.developer.apple.com/thread/120790

答案 1 :(得分:0)

一线解决方案。
navController.popViewController(animated: false)

之前
settingsTableViewController.tableView.removeFromSuperview()  

花了我四天的苦苦挣扎:)

答案 2 :(得分:0)

就我而言,问题是在 viewDidDisappear 中隐藏导航栏时。刚刚从 superView 中删除 UITableView - 删除了警告。

override func viewDidDisappear(_ animated: Bool) {
        super.viewDidDisappear(animated)
        // FIXED TABLEVIEW LAYOUT WARNING ON CLOSING !!!
        // FIXED TABLEVIEW LAYOUT WARNING ON CLOSING !!!
        // FIXED TABLEVIEW LAYOUT WARNING ON CLOSING !!!
        // https://stackoverflow.com/a/58197432/44964
        self.aboutTableView?.removeFromSuperview()
        self.navigationController?.setNavigationBarHidden(true, animated: false)
    }