Почему мое представление смещается при изменении стилей презентации?

У меня есть расширение iMessage, и у меня возникают проблемы с изменением стилей презентации. Когда я впервые открываю приложение, я получаю следующее:введите здесь описание изображения Так и должно быть. Теперь, когда я переключаюсь на расширенный стиль презентации, я получаю следующее:введите здесь описание изображения Это тоже то, что я хочу. Однако, когда я снова переключаюсь на компактный, происходит следующее:введите здесь описание изображения Вот мой код:

override func didTransition(to presentationStyle: MSMessagesAppPresentationStyle) {
    super.didTransition(to: presentationStyle)
    presentSearchStickersView()
}
private func presentSearchStickersView() {
    let controller = (storyboard?.instantiateViewController(withIdentifier: "SearchStickersViewController"))! as! SearchStickersViewController
    controller.view.backgroundColor = #colorLiteral(red: 1, green: 1, blue: 1, alpha: 1)
    controller.searchDelegate = self
    for child in childViewControllers {
        child.willMove(toParentViewController: nil)
        child.view.removeFromSuperview()
        child.removeFromParentViewController()
    }
    self.addChildViewController(controller)
    self.view.addSubview(controller.view)
}

А вот скриншот моего главного ограничения:введите здесь описание изображения


person A Tyshka    schedule 01.08.2016    source источник


Ответы (2)


С моей точки зрения, вы не должны восстанавливать панель каждый раз, когда переключаетесь в компактный или расширенный режим. Вы должны создать его экземпляр один раз, а затем установить ограничения в верхней части представления. Я так пробовал, работает нормально ;)

Подводя итог, если вы используете раскадровку

  1. В вашей раскадровке добавьте свое подвид к контроллеру
  2. Установите ограничение Top, ширину, равную superview, и centerX для superview.
  3. В коде установите панель поиска (делегата и т. д.) в viewdidload.

Если вы не используете раскадровку.

  1. загрузите свой xib и добавьте его в свое подпредставление (возможно, в didBecomeActive или что-то в этом роде)
  2. Не забудьте установить для translatesAutoresizingMaskIntoConstraints значение false
  3. Добавьте те же ограничения, что и выше
person RomOne    schedule 01.08.2016
comment
Я сделал это, но в расширенном виде верхняя часть моего представления скрывалась за панелью навигации. Вот почему я представил контроллер представления - person A Tyshka; 03.08.2016
comment
Вы использовали ограничение Top Layout Guide? - person RomOne; 03.08.2016
comment
Да, я использовал Top Layout Guide. добавляю скриншот - person A Tyshka; 03.08.2016
comment
Хорошо, я удалил код, который представляет контроллер представления, и у меня возникла точно такая же проблема только с ограничениями раскадровки. Я бы очень хотел, чтобы отладка просмотра была доступна в расширениях iMessage. - person A Tyshka; 03.08.2016
comment
Какую бета-версию вы используете? - person RomOne; 04.08.2016
comment
Я попробую сегодня вечером вашу конфигурацию;) - person RomOne; 04.08.2016
comment
Вышла бета-версия 4, попробуйте обновить Xcode и iOS;) - person RomOne; 05.08.2016
comment
Хорошо, я сделаю это. Тем временем я понял, что если я встрою представление стека в начальный контроллер представления, у меня не будет проблем. Однако у меня возникла проблема при представлении другого контроллера представления с представлением стека. - person A Tyshka; 05.08.2016
comment
О, да, я не видел, чтобы вы использовали представление стека! Вам это действительно нужно здесь? - person RomOne; 05.08.2016
comment
Давайте продолжим это обсуждение в чате. - person RomOne; 05.08.2016

Как сказал RomOne, вы должны поместить его туда один раз. Переключатели стилей должны обрабатываться ограничениями

person Jason    schedule 01.08.2016