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