UITabbarController隐藏标签栏破坏了安全区域的布局

时间:2018-09-17 16:45:54

标签: ios autolayout uitabbarcontroller safearealayoutguide

我很沮丧,无法解决自动布局问题。希望对这个问题有新的见解会更好地找到解决方案...

我在情节提要文件中有一个UITabBarController,并且在第一个视图控制器中有一个MKMapView和一个按钮: This is how the view looks initially in portrait mode, as it should.

该按钮被限制在View Controller视图的安全区域的底部。 MKMapView限于其超级视图。到目前为止,它仍然可以正常工作。

当我旋转手机时出现问题。在UITabBarController的viewWillTransitionToSize:withTransitionCoordinator:方法中,我调用[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 :(得分:0)

好吧,我想通了,这并不是太明显。 self.tabBar setHidden:调用包含在[coordinator animateAlongsideTransition:]的动画块中。我取出动画块,一切正常。

谢谢Andre Slotta的评论-至少可以帮助我意识到,如果故事板中没有代码,那是有问题的。

答案 1 :(得分:0)

您可以通过重新布置约束以及设备旋转来做到这一点

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

        //code

     }) { (_) in       
   }
}