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