2015-06-14 88 views
2

我浏览过四处寻找答案,但我只找到有类似问题的人,而不是这个确切的问题,所以希望这里有人能帮助我!当状态栏隐藏旋转时调整视图

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

我现在正在努力使我的应用程序通用。我注意到的第一件事是,当iPhone在肖像模式下有帮助时,状态栏会显示,但当它处于横向模式时,状态栏会隐藏,现在我有一个20点的工具栏。

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

回答

14

正确的做法是:

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

  • 将超前视图(不是超级视图边距)的前导限制0添加到超级视图(不超级视图边距)后跟踪限制0。

  • 将top constraint 0添加到顶部布局指南。这似乎会在工具栏上方留下20个像素的空间,但是会笑出一个邪恶的笑声并继续。

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

  • 有无视图控制器采用UIBarPositioningDelegate和执行委托方法如下:

    class ViewController: UIViewController, UIBarPositioningDelegate { 
        func positionForBar(bar: UIBarPositioning) -> UIBarPosition { 
         return .TopAttached 
        } 
    } 
    

这将导致工具栏的表观高度被扩展了状态栏后面时,有一个状态栏,但它会有正常的高度,并且在没有状态栏时会碰到顶部。

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

+0

谢谢!这是我第一次使用自动布局,并且我已经将自己的最高限制设置为超级视图顶部,而不是像你说的那样“顶部布局指南”。通过将相关对齐,它就像你的屏幕截图一样工作。我不需要添加你添加的代码,我可以保留我自己的工具栏。再次感谢! – Rob