Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/103.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 旋转时状态栏隐藏时调整视图_Ios_Rotation_Autolayout_Uistatusbar - Fatal编程技术网

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

Ios 旋转时状态栏隐藏时调整视图,ios,rotation,autolayout,uistatusbar,Ios,Rotation,Autolayout,Uistatusbar,我已经到处寻找答案,但我只找到有类似问题的人,而不是这个确切的问题,所以希望这里有人能帮助我 我有一个iPad应用程序。在iPad上,无论是纵向还是横向握住iPad,都会显示带有时钟和电池的状态栏。出于这个原因,我在一些视图控制器的顶部有一些自定义工具栏,这些视图控制器包含了这20个点 我现在正在努力使我的应用程序具有通用性。我注意到的第一件事是,当iPhone在纵向模式下帮助时,状态栏会显示出来,但当它在横向模式下保持时,状态栏会隐藏起来,现在我有一个工具栏,它的高度太高了20点 我对总是隐藏

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

我有一个iPad应用程序。在iPad上,无论是纵向还是横向握住iPad,都会显示带有时钟和电池的状态栏。出于这个原因,我在一些视图控制器的顶部有一些自定义工具栏,这些视图控制器包含了这20个点

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


我对总是隐藏或总是显示状态栏不感兴趣。我认为在手机的横向模式下隐藏它的功能很好。我想做的是能够检测到状态栏何时隐藏,以便调整工具栏的Y位置(使其为0或-20)。如果有一种方法可以让我设置布局约束来处理此场景,则会有更好的解决方案。

正确的方法是:

  • 使用具有正常高度的正常工具栏-不要对高度设置任何约束

  • 将前导约束0添加到superview(非superview边距),将尾部约束0添加到superview(非superview边距)

  • 将顶部约束0添加到顶部布局指南(或安全区域顶部)。这看起来会在工具栏上方留下20个像素的空间,但是笑出一个邪恶的笑声然后继续

  • 将视图控制器设置为工具栏的代理(有一个用于此目的的代理出口)

  • 让视图控制器采用UIBarPositionDelegate,并按如下方式实现委派方法:

    class ViewController: UIViewController, UIBarPositioningDelegate {
        func position(for bar: UIBarPositioning) -> UIBarPosition {
            return .topAttached
        }
    }
    
当有状态栏时,这将导致工具栏的外观高度向上延伸到状态栏后面,但当没有状态栏时,工具栏将具有正常高度,并与顶部相撞


谢谢!这是我第一次使用autolayout,我已经将顶部约束设置为superview的顶部,而不是您所说的“顶部布局指南”。通过调整相对位置,它就像你的屏幕截图一样神奇。我不需要添加您添加的代码,而且我可以保留自己的工具栏。再次感谢!在Swift 4中,它碰巧是“.topAttached”(小T)@MarcoWeber当然,我会更改它。这个答案仍然是正确的,可能仍然有用!