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

UITabbarController hide tab bar breaks safe area layout

让自动布局问题起作用让我很沮丧。希望对这个问题有一些新的看法会更好地找到解决方案...

我在故事板文件中有一个 UITabBarController,在第一个视图控制器中有一个 MKMapView 和一个按钮:

按钮被限制在视图控制器视图安全区域的底部。 MKMapView 被限制在它的超级视图中。到目前为止效果很好。

旋转 phone 时出现问题。在 UITabBarController 的 viewWillTransitionToSize:withTransitionCoordinator: 方法中,我调用 [self.tabBar setHidden:(size.height < kMinViewSize)] 以便在视图高度太小时隐藏标签栏。

隐藏标签栏后,我得到的是:

然后当我再次旋转回纵向模式时,标签栏会按原样取消隐藏,但布局又一次搞砸了:

最后,如果我 select 另一个选项卡,然后返回到地图选项卡,按钮将移回正确的位置。

我是不是遗漏了什么明显的东西?预先感谢您的帮助!

好吧,我想通了,而且不是很明显。 self.tabBar setHidden: 调用包含在 [coordinator animateAlongsideTransition:] 的动画块中。我把动画块拿出来了,一切正常

谢谢安德烈·斯洛塔 (Andre Slotta) 的评论——这至少帮助我意识到代码中有问题,即使情节提要中没有。

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

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

        //code

     }) { (_) in       
   }
}