如何保持导航栏消失与MSMessagesViewController – > UIContainerView – > UINavigationController – > UITableViewController?

我试图在iMessage应用程序(iOS 10)中放置一个带有表视图控制器的导航控制器。 当我将UINavigationController放在UIContainerView中的UIContainerView时,这似乎工作。

外观紧凑时。

但是,在展开视图中,这会中断。 控制器已经消失的UINavigationBar

展开时外观破碎。

我该如何补救,或者我采取了错误的做法?

让我开始假设您使用view.addSubview将您的UITableViewController添加到view.addSubview

为了正确显示导航栏。 确保您已正确设置所有约束。 这里是我的例子,希望这会对你有用:


     //embedded新的控制器。 在WWDC中展示VC的推荐方式(icecream示例)。 丑,但做的工作
     addChildViewController(控制器)

     view.addSubview(controller.view)
    让viewRect = view.bounds
     controller.view.frame = viewRect
     controller.view.translatesAutoresizingMaskIntoConstraints = false


     controller.view.leftAnchor.constraint(equalTo:view.leftAnchor).isActive = true
     controller.view.rightAnchor.constraint(equalTo:view.rightAnchor).isActive = true
     controller.view.topAnchor.constraint(equalTo:topLayoutGuide.bottomAnchor).isActive = true

    如果presentationStyle == .compact {
         controller.view.bottomAnchor.constraint(equalTo:view.bottomAnchor).isActive = true
     } else {
         controller.view.bottomAnchor.constraint(equalTo:bottomLayoutGuide.topAnchor).isActive = true
     }

     controller.didMove(toParentViewController:self)

这里是苹果开发者论坛上的post的链接,它解决了我的问题: https : //forums.developer.apple.com/thread/52049

在显示的屏幕上,导航栏没有任何问题!

所以在我的情况下,我正在使用故事板,所以我会添加故事板的解决scheme。

与DLee的答案类似,顶部约束条件需要设置为“顶部布局指南”而不是“顶部”。 以下是故事板中的样子:

Container View.top =顶部布局Guide.bottom

在我的情况下,我使用Container View来容纳所有东西,因此,将顶层布局指南设置为顶层约束条件,使得所有的东西都放在正确的位置。

在我的文章中,我最初使用了“顶部”,这是导致iMessage应用程序(特别是导航栏)部分消失的原因。