TopAnchor viewController, изменяемого в iMessage Расширение между режимами представления

Я делаю приложение iMessage для опросов (да, я знаю), и у меня возникают проблемы при переходе между режимами презентации. Серия скриншотов ниже показывает, что при запуске приложения все в порядке в компактном режиме. Когда развернуто, все по-прежнему правильно, но потом, когда я возвращаюсь к сжатию, контент смещается вниз на то, что похоже на ту же высоту, что и панель навигации больших сообщений (86, я считаю)

Я попытался установить верхнее ограничение равным -86 при переключении обратно к компактному представлению, однако это либо ничего не делает, либо отправляет его обратно туда, где должно быть, а затем вычитает 86, так что оно исчезает слишком высоко. Я основал этот проект на примере проекта IceCream из приложения, поэтому не уверен, откуда возникла эта проблема (возможно, автопоставка, но все закреплено в руководствах по макету)

Вот код, который добавляет контроллер представления:

func loadTheViewController(controller: UIViewController) {
    // Remove any existing child controllers.
    for child in childViewControllers {
        child.willMove(toParentViewController: nil)
        child.view.removeFromSuperview()
        child.removeFromParentViewController()
    }

    // Embed the new controller.
    addChildViewController(controller)

    controller.view.frame = view.bounds
    controller.view.translatesAutoresizingMaskIntoConstraints = true
    view.addSubview(controller.view)

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

    controller.didMove(toParentViewController: self)
}

Я работал над этим ради того, что навсегда, поэтому любые предложения приветствуются.

1 ответ

Решение

Вы устанавливаете ограничения на просмотр, но вы установили translatesAutoresizingMaskIntoConstraints к истине. Ограничения маски авторазмера, скорее всего, будут конфликтовать с добавляемыми ограничениями, что приведет к неожиданным результатам. Вы должны изменить на:

controller.view.translatesAutoresizingMaskIntoConstraints = false

Также вместо того, чтобы прикалывать view.topAnchorПриколи к topLayoutGuide, который будет учитывать верхнюю панель навигации.

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

Так же,

controller.view.bottomAnchor.constraint(equalTo: bottomLayoutGuide.topAnchor).isActive = true
Другие вопросы по тегам