如何过渡出父 UINavigationController

Posted

技术标签:

【中文标题】如何过渡出父 UINavigationController【英文标题】:How to transition out of parent UINavigationController 【发布时间】:2019-03-01 15:49:03 【问题描述】:

我有以下代码,它设置并显示要嵌入到 UINavigationController 中的 UIViewController:

private func transitionToMainVC() 
  let vc = UINavigationController(rootViewController: SpacesVC())

  DispatchQueue.main.async 
    self.show(vc, sender: self)
  

现在,在SpacesVC 我想show() 另一个 UIViewController,但在“父”UINavigationController 之外。

当我在SpacesVC 中使用以下代码时:

// Called by a button touch up inside
@objc private func transitionToMainVC() 
  let vc = NextVC()

  self.show(vc, sender: self)

它转换为NextVC,但它在屏幕顶部显示导航栏;也就是说,新的视图控制器仍然嵌入在第一个 sn-p 中定义的 UINavigationController 下。

我知道在NextVC 中隐藏导航栏的可能性如下:

override func viewWillAppear(_ animated: Bool) 
  super.viewWillAppear(animated)
  navController.isNavigationBarHidden = true

但我想 show() NextVC 而不将其嵌入导航控制器中,因为我不再需要它了。我该怎么做?

【问题讨论】:

【参考方案1】:

使用this method 代替show

func present(_ viewControllerToPresent: UIViewController, 
    animated flag: Bool, 
  completion: (() -> Void)? = nil)

【讨论】:

以上是关于如何过渡出父 UINavigationController的主要内容,如果未能解决你的问题,请参考以下文章

如何将粘性定位元素移出父div?

mysql如何根据很多子节点查询出父节点,只要一条路径上的

访问 kivy 弹出父级

Intellij IDEA 里面怎么在实现父类方法的时候不带出父类的注释

flex为1的时候,子元素限制一行时内容撑出父布局解决方案

flex为1的时候,子元素限制一行时内容撑出父布局解决方案