如何使用 MSMessagesViewController -> UIContainerView -> UINavigationController -> UITableViewController 防止导航栏消失?

How to keep navigation bar from disappearing with MSMessagesViewController -> UIContainerView -> UINavigationController -> UITableViewController?

我正在尝试将带有 table 视图控制器的导航控制器放入 iMessage 应用程序 (iOS 10) 中。当我将 UINavigationController 放在 MSMessagesViewController 中的 UIContainerView 中时,这似乎有效。

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

我该如何解决这个问题,还是我采取了错误的方法?

您显示的屏幕中导航栏没有任何问题!!

首先假设您使用 view.addSubviewUITableViewController 添加到 MSMessagesAppViewController

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


    // Embed the new controller. Recommended way of presenting VC shown in WWDC (icecream example). Ugly but does the work
    addChildViewController(controller)

    view.addSubview(controller.view)
    let 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

    if 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)

这是 Apple 开发者论坛上 post 的 link 解决了我的问题:https://forums.developer.apple.com/thread/52049

所以在我的例子中,我使用的是 Storyboard,所以我将为此添加 Storyboard 解决方案。

与 DLee 的回答类似,顶部约束需要设置为 "Top Layout Guide" 而不是 "Top." 以下是 Storyboard 中的样子:

在我的例子中,我使用容器视图来保存所有内容,因此将顶部布局指南设置为顶部约束,它使所有内容都在正确的位置。

在我的 post 中,我最初使用 "Top" 导致部分 iMessage 应用程序(特别是导航栏)消失。