3

wantsFullScreenLayout设置为的应用程序中YES,处理扩展高度状态栏的最佳做法是什么,即当存在电话或 VoIP 应用程序或激活个人热点功能时显示额外的状态栏?

通知(或正确方法的UIApplicationWillChangeStatusBarOrientationNotification相应委托方法UIApplication,还是我忽略了一些明显的东西?

我在这里提出了一个小示例项目演示这个问题。

谢谢

亚历克斯

4

1 回答 1

1

具有扩展高度的状态栏只能在 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 可用时我会更新这篇文章。

于 2013-06-15T00:28:34.310 回答