状态栏在旋转时隐藏时调整视图

Adjusting views when Status Bar hides on rotation

我四处寻找这个问题的答案,但我只找到有类似问题的人,而不是这个确切的问题,所以希望这里有人能帮助我!

我有一个 iPad 应用程序。在 iPad 上,当您以纵向或横向按住 iPad 时,将始终显示带有时钟和电池的状态栏。出于这个原因,我在我的一些视图控制器的顶部有一些自定义工具栏,占了这 20 个点。

我现在正在努力使我的应用程序通用。我注意到的第一件事是,当 iPhone 在纵向模式下提供帮助时,会显示状态栏,但在横向模式下,状态栏会隐藏,现在我的工具栏高了 20 点。

我对总是隐藏或总是显示状态栏不感兴趣。我认为在 phone 上以横向模式隐藏它的功能很好。我想要做的是能够检测到状态栏何时被隐藏,以便我可以调整工具栏的 Y 位置(因此将其设置为 0 或 -20)。一个更好的解决方案是,如果我有办法设置我的布局约束来处理这种情况。

正确的做法是:

  • 使用具有正常高度的普通工具栏 - 不要对高度设置任何限制。

  • 将前导约束 0 添加到 superview(不是 superview 边距),将尾随约束 0 添加到 superview(不是 superview 边距)。

  • 将顶部约束 0 添加到顶部布局指南(或安全区域顶部)。这似乎会在工具栏上方留下 20 像素的 space,但请大笑并继续。

  • 将视图控制器设置为工具栏的委托(为此目的有一个委托插座)。

  • 让视图控制器采用 UIBarPositioningDelegate 并实现委托方法如下:

    class ViewController: UIViewController, UIBarPositioningDelegate {
        func position(for bar: UIBarPositioning) -> UIBarPosition {
            return .topAttached
        }
    }
    

这会导致有状态栏时toolbar的外观高度在状态栏后面向上延伸,但没有状态栏时它会保持正常高度并顶住顶部。