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

Rob*_*Rob 3 rotation ios uistatusbar autolayout

我一直在寻找答案,但我只找到了有类似问题的人而不是这个问题,所以希望有人可以帮助我!

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

我正在努力使我的应用程序具有普遍性.我注意到的第一件事是当iPhone在纵向模式下提供帮助时会显示状态栏,但是当它以横向模式保持时,状态栏会隐藏,现在我有一个20点太高的工具栏.

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

mat*_*att 22

正确的方法是:

  • 使用具有正常高度的普通工具栏 - 不要在高度上设置任何约束.

  • 将前导约束0添加到superview(不是superview margin),将约束0拖尾到superview(不是superview margin).

  • 将顶部约束0添加到顶部布局指南(或安全区域的顶部).这似乎会在工具栏上方留出20个像素的空间,但笑一笑,然后继续.

  • 将视图控制器设置为工具栏的委托(为此目的有一个委托出口).

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

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

当有状态栏时,这将导致工具栏的明显高度向上扩展到状态栏后面,但是当没有状态栏时,它将具有正常高度并且在顶部上方.

在此输入图像描述 在此输入图像描述 在此输入图像描述