隐藏 Tabbar 时,安全区域插图不会更新

The SafeArea insets are not updated when UITabbar is hidden

我正在使用基于标签栏的应用程序,但在详细信息屏幕上隐藏了标签栏。问题是当标签栏隐藏时它仍然会占据标签栏的白色 space 并且 safeAreaLayoutInsets 不会更新。在方向改变或从背景移动到前景时它会起作用。

self.tabBarController.tabBar.hidden = YES;

查看层次结构

UITabbarController
  |--UISplitViewController
     |--UIViewController (first VC)
        |--UINavigationController
           |--UIViewController (second VC)

该问题与 Apple Forum

中报告的问题类似

如果您需要切换可见视图的选项卡栏可见性,此解决方法修复了布局:

let currentFrame = tabBarController.view.frame
tabBarController.view.frame = currentFrame.insetBy(dx: 0, dy: 1)
tabBarController.view.frame = currentFrame

此代码应在选项卡栏可见性更改后立即执行。它触发安全区域的更新和视图的单个布局传递。 frame 的大小调整对用户不可见。

这是一种解决方法,当然不是很好,但它对我们有用,而且似乎没有负面影响。此外,我预计将来 iOS 自行更新布局时不会产生负面影响。