2017-01-14 8 views
0

Я делаю опрос iMessage app (да, я знаю) и имею проблему, перемещающуюся между режимами презентации. Серия скриншотов ниже показывает, что при запуске приложения все в порядке в компактном режиме. При разворачивании все еще правильна, но потом, когда я вернусь, чтобы уплотнить содержимое сдвигается вниз, что выглядит такой же высоты, что и большие сообщения навигационной панели (86, я верю)TopAnchor of viewController changin in iMessage Расширение между режимами презентации

enter image description here

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

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

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 в true. Ограничения маски авторезинирования, скорее всего, будут конфликтовать с ограничениями, которые вы добавляете, вызывать неожиданные результаты. Вы должны изменить, чтобы:

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 
+0

Спасибо, что отсортирован его. Я вернул пример приложения Apple IceCream и выглядел так, как будто я изменил 'translatesAutoresizingMaskIntoConstraints', однако по какой-то причине они привязаны к topAnchor, а не к макетам. – SimonBarker