状态栏隐藏在轮播时调整视图

时间:2015-06-14 15:43:42

标签: ios rotation autolayout uistatusbar

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

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

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

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

1 个答案:

答案 0 :(得分:22)

正确的方法是:

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

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

  • 将顶部约束0添加到顶部布局指南(或安全区域的顶部)。这似乎会在工具栏上方留下20个像素的空间,但笑一笑就行了。

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

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

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

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

enter image description here enter image description here enter image description here