UITabbarController скрыть панель вкладок ломает макет безопасной области - PullRequest
0 голосов
/ 17 сентября 2018

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

У меня есть UITabBarController в файле раскадровки, а в первом контроллере представления есть MKMapView и кнопка: This is how the view looks initially in portrait mode, as it should.

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

Проблема возникает, когда я поворачиваю телефон.В методе viewWillTransitionToSize:withTransitionCoordinator: UITabBarController я вызываю [self.tabBar setHidden:(size.height < kMinViewSize)], чтобы скрыть панель вкладок, когда высота представления слишком мала.

После сокрытия панели вкладок, это то, что я получаю: Tab bar is hidden, but neither the map view nor button shift to fill the void

А потом, когда я снова поворачиваюсь в портретный режим, панель вкладок раскладывается, как и должна, но раскладка снова облажается: Tab bar unhidden, now it covers the map view and button

И, наконец, если я выберу другую вкладку, а затем вернусь на вкладку карты, кнопка вернется в правильное местоположение.

Я что-то упускаю из виду?Заранее спасибо за помощь!

Ответы [ 2 ]

0 голосов
/ 19 сентября 2018

Вы можете сделать это, переставляя ограничения вместе с вращением устройства

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) {
coordinator.animate(alongsideTransition: { (_) in

        //code

     }) { (_) in       
   }
}
0 голосов
/ 17 сентября 2018

Ну, я понял это, и это было не слишком очевидно. Вызов self.tabBar setHidden: содержится в блоке анимации [coordinator animateAlongsideTransition:]. Я вынул блок анимации, и все работало нормально.

Спасибо, Андре Слотта, за ваш комментарий - который, по крайней мере, помог мне понять, что что-то не так в коде, если не в раскадровке.

...