iOS 导航栏与横向状态栏重叠

问题描述 投票:0回答:1

我有一个几乎完全使用 Xcode Interface Builder 构建的应用程序,除了覆盖

supportedInterfaceOrientations
UIViewControllers
方向修复为纵向或横向之外,没有任何代码。该应用程序由两个视图控制器组成:

  • 第一个嵌入在
    UINavigationController
    中并具有导航栏。该视图控制器的方向是纵向固定的。
  • 第二个是横向固定的,并以全屏模式呈现。它有一个按钮可以通过展开转场返回到第一个 VC。

当按下第二个视图控制器中的按钮时,VC 滑出窗口,一旦动画结束,状态栏就会出现在导航栏上方,部分重叠(注意:按下状态时布局会自行修复) 。您可以在以下视频中查看问题:https://imgur.com/FIBoszM

以下屏幕截图显示了“实际”(左)和“预期”(右)行为。

Actual Expected

为什么会出现这种情况?

ios uinavigationcontroller uinavigationbar modalviewcontroller
1个回答
-1
投票

这不是 iOS 错误。不幸的是,目前react-native中没有API让我们能够获取当前状态栏高度并监听变化,所以我们无法自动处理这个问题。 facebook/react-native#20999

您可以尝试此解决方法来解决此问题:

open override func viewDidLoad() {
    super.viewDidLoad()
    NotificationCenter.default.addObserver(self, selector: #selector(updateStatusBar), name: Notification.Name.UIWindowDidBecomeKey, object: nil)
    NotificationCenter.default.addObserver(self, selector: #selector(updateStatusBar), name: Notification.Name.UIDeviceOrientationDidChange, object: nil)
}

StatusBar
更新方法:

@objc func updateStatusBar() {
    UIApplication.shared.isStatusBarHidden = UIApplication.shared.statusBarOrientation.isLandscape setNeedsStatusBarAppearanceUpdate() 
}

您还可以按照以下解决方案:

© www.soinside.com 2019 - 2024. All rights reserved.