在wantsFullScreenLayout
设置为的应用程序中YES
,处理扩展高度状态栏的最佳做法是什么,即当存在电话或 VoIP 应用程序或激活个人热点功能时显示额外的状态栏?
通知(或正确方法的UIApplicationWillChangeStatusBarOrientationNotification
相应委托方法UIApplication
,还是我忽略了一些明显的东西?
我在这里提出了一个小示例项目来演示这个问题。
谢谢
亚历克斯
在wantsFullScreenLayout
设置为的应用程序中YES
,处理扩展高度状态栏的最佳做法是什么,即当存在电话或 VoIP 应用程序或激活个人热点功能时显示额外的状态栏?
通知(或正确方法的UIApplicationWillChangeStatusBarOrientationNotification
相应委托方法UIApplication
,还是我忽略了一些明显的东西?
我在这里提出了一个小示例项目来演示这个问题。
谢谢
亚历克斯
具有扩展高度的状态栏只能在 iPhone 或 iPod 上以纵向显示。
当状态栏框架发生变化时,您可以使用UIApplicationWillChangeStatusBarFrameNotification
(not UIApplicationWillChangeStatusBarOrientationNotification
) 获得通知。当界面方向发生变化时,也会发布此通知。在框架更改时,您可以手动重新布局视图。考虑的价值[UIApplication sharedApplication].statusBarFrame.size.height
。如果是扩展状态栏,则为 40 分。
但是,对于全屏视图控制器来说,完全隐藏状态栏要简单得多,以便视图可以利用全屏显示:
[UIApplication sharedApplication].statusBarHidden = NO;
您也可以在照片应用程序中执行类似的操作:使用半透明状态栏样式,让用户通过单击隐藏状态栏或在一段时间后自动隐藏状态栏(当用户不与应用程序交互时)。这应该是动画的。使用方法setStatusBarHidden:withAnimation:
。
请注意,这wantsFullScreenLayout
是视图控制器属性,而不是 UIApplication 的属性。当并非所有视图控制器都以全屏模式呈现时,您需要小心。
从苹果文档:
想要全屏布局
一个布尔值,指示视图是否应在状态栏下方。
@property(nonatomic, assign) BOOL wantsFullScreenLayout
讨论
当视图控制器呈现其视图时,它通常会缩小该视图,使其框架不会与设备的状态栏重叠。将此属性设置为 YES 会导致视图控制器调整其视图的大小,以便它填满整个屏幕,包括状态栏下方的区域。(当然,要做到这一点,托管视图控制器的窗口本身必须调整大小以填满整个屏幕,包括状态栏下方的区域。)如果您具有半透明状态,通常会将此属性设置为 YES栏并希望您的视图内容在该视图后面可见。
如果此属性为 YES,则视图不会调整大小以使其与选项卡栏重叠,但会调整其大小以与半透明工具栏重叠。无论此属性的值如何,导航控制器始终允许视图与半透明导航栏重叠。
此属性的默认值为 NO,这会导致视图被布置,因此它不会在状态栏下方重叠。
这个答案适用于 iOS 6,当 iOS 7 可用时我会更新这篇文章。