iOS9用自定义uiwindow覆盖状态栏 - 位置错误

Posted

技术标签:

【中文标题】iOS9用自定义uiwindow覆盖状态栏 - 位置错误【英文标题】:iOS9 covering status bar with custom uiwindow - wrong position 【发布时间】:2015-10-13 09:56:30 【问题描述】:

我正在尝试用我自己的视图覆盖状态栏,为此我通过执行类似操作(也在旋转之后)为我的视图计算框架:

UIScreen *screen = [UIScreen mainScreen];
CGRect statusBarFrame = [UIApplication sharedApplication].statusBarFrame;

对于 ios8+(因为 ios8 UIScreen 是方向相关的):

CGRect frame = [screen.coordinateSpace convertRect:statusBarFrame toCoordinateSpace:screen.fixedCoordinateSpace];
[self setFrame:frame];

对于 iOS7:

[self setFrame:statusBarFrame];

它适用于 iOS8 及更低版本,但在使用 Xcode 7 beta 4 和 iOS 9 SDK 构建我的应用程序时,在横向或倒置启动应用程序时出现问题(如果应用程序以纵向启动,它工作正常)...

即。当我在 Upsidedown 时启动应用程序时,应该覆盖状态栏的自定义 uiwindow 将始终位于屏幕底部,有什么想法可能是错误的吗?

【问题讨论】:

rushelmet,还没有:( 查看最后一个答案:***.com/questions/33244580/view-above-the-status-bar/… 我明白了在状态栏上方设置视图以使用那里的空间而不覆盖整个状态栏的原因。但是当你想覆盖整个状态栏的时候,为什么不干脆把状态栏隐藏起来,用简单的约束把自己的视图固定在顶部呢? 【参考方案1】:

如果没有其他信息,最好的解决方案是简单地隐藏状态栏。如果出于动画目的或其他原因仍需要“状态栏”,则此场景中的典型解决方案是通过调用来模拟它

- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdatesUIScreen

并使用返回的视图作为您呈现的任何视图/窗口的背景。从 iOS 9 开始,没有公共方法可以让您获得您指定的特定行为。

【讨论】:

以上是关于iOS9用自定义uiwindow覆盖状态栏 - 位置错误的主要内容,如果未能解决你的问题,请参考以下文章

自定义监听状态栏点击

添加新 UIWindow 时以编程方式隐藏状态栏?

状态栏与 UIWindow 分开旋转

在单独的 UIWindow 中锁定状态栏方向

将 UIView 或 UIWindow 放在状态栏上方

iOS不得姐项目--封装状态栏指示器(UIWindow实现)