Как сохранить панель навигации от исчезновения с MSMessagesViewController -> UIContainerView -> UINavigationController -> UITableViewController?

ios uinavigationcontroller uicontainerview ios10 imessage

874 просмотра

3 ответа

18 Репутация автора

Я пытаюсь поместить контроллер навигации с контроллером табличного представления в приложение iMessage (iOS 10). Это, кажется, работает, когда я помещаю UINavigationControllerв UIContainerViewпределах MSMessagesViewController.

Внешний вид, когда компактный.

Тем не менее, это ломается, когда в расширенном представлении. То, UINavigationBarчто контроллер исчезает.

Сломанный внешний вид при расширении.

Как я могу исправить это, или я использую неправильный подход?

Автор: Isaac William Trimble-Pederson Источник Размещён: 17.07.2016 09:33

Ответы (3)


1 плюс

76 Репутация автора

На показанных вами экранах нет проблем с панелью навигации !!

Автор: H.Jacob Размещён: 18.07.2016 01:27

2 плюса

185 Репутация автора

Позвольте мне начать с предположения, что вы использовали, view.addSubviewчтобы добавить свой UITableViewControllerкMSMessagesAppViewController

Для правильного отображения панели навигации. Убедитесь, что вы правильно установили все свои ограничения. Вот пример, который у меня есть, и, надеюсь, это сработает для вас:

    // Вставить новый контроллер. Рекомендуемый способ представления VC показан в WWDC (пример с мороженым). Некрасиво но делает работу
    addChildViewController (контроллер)

    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
    } еще {
        controller.view.bottomAnchor.constraint (equalTo: bottomLayoutGuide.topAnchor) .isActive = true
    }

    controller.didMove (toParentViewController: self)

Вот ссылка на пост на форуме разработчиков Apple, который решил мою проблему: https://forums.developer.apple.com/thread/52049

Автор: DLee Размещён: 01.08.2016 05:37

0 плюса

18 Репутация автора

Решение

Так что в моем случае я использовал раскадровки, поэтому я добавлю решение раскадровки к этому.

Подобно ответу DLee, верхнее ограничение должно быть установлено в «Top Layout Guide», а не «Top». Вот как это выглядит в раскадровке:

Контейнер View.top = Top Layout Guide.bottom

В моем случае я использовал «Контейнерное представление» для хранения всего, поэтому, имея верхнее руководство по макетированию в качестве верхнего ограничения, оно заставило все идти в правильном месте.

В своем посте я первоначально использовал «Верх», из-за которого исчезли части приложения iMessage (в частности, панель навигации).

Автор: Isaac William Trimble-Pederson Размещён: 02.08.2016 04:02
Вопросы из категории :
32x32