How to keep navigation bar from disappearing with

2019-07-29 23:17发布

问题:

I am trying to put a navigation controller with a table view controller within an iMessage app (iOS 10). This seems to work when I put the UINavigationController within an UIContainerView within the MSMessagesViewController.

However, this breaks when in expanded view. The UINavigationBar that the controller has disappears.

How can I remedy this, or am I taking the wrong approach?

回答1:

Let me start with the assumption that you used view.addSubview to add your UITableViewController to the MSMessagesAppViewController

In order to show the navigation bar correctly. Make sure you have set all your constraints correctly. Here's the example I have, and hopefully this would work for you:


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

Here's the link to the post on the Apple Developer Forum which solved my problem: https://forums.developer.apple.com/thread/52049



回答2:

In the screens you show there isn't any problem with the navigation bar!!



回答3:

So in my case, I was using Storyboards, so I will add in the Storyboard solution to this.

Similar to DLee's answer, the top constraint needs to be set to the "Top Layout Guide" not "Top." Here's what it looks like in a Storyboard:

In my case, I used a Container View to hold everything, so with this having the top layout guide set as the top constraint, it made everything go in the right place.

In my post, I originally used the "Top" which was what caused parts of the iMessage app (specifically the navigation bar) to disappear.