iOS9 在使用自定义 UIWindow 时覆盖了状态栏 - 错误位置

7

我正在尝试用自己的视图覆盖状态栏,并为此计算了我的视图的框架,方法如下(旋转后也是如此):

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构建我的应用程序时,如果应用程序在横向或倒置的状态下启动就会出现问题(如果应用程序在纵向状态下启动,则正常工作)...

例如,当我将应用程序倒置启动时,应该覆盖状态栏的自定义UI窗口总是最终出现在屏幕底部,您有什么想法可能是什么问题?


抱歉,rushelmet还没有完成 :( - Artrmz
请查看最后一个答案:http://stackoverflow.com/questions/33244580/view-above-the-status-bar/33244933#33244933 - rushelmet
我明白在状态栏上方设置视图的原因是利用那里的空间而不覆盖整个状态栏。但是,当您想要覆盖整个状态栏时,为什么不简单地隐藏状态栏并使用简单的约束将自己的视图固定在顶部呢? - Axel Zehden
1个回答

0

如果没有额外的信息,最好的解决方法是简单地隐藏状态栏。如果你仍然想要“状态栏”用于动画效果或其他原因,那么在这种情况下的典型解决方案是通过调用

- (UIView *)snapshotViewAfterScreenUpdates:(BOOL)afterUpdatesUIScreen

并将返回的视图用作您正在呈现的任何视图/窗口的背景。截至iOS 9,没有公共方法允许您获得您指定的特定行为。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接