美文网首页
关于修改状态栏置顶功能而导致的照相机黑屏问题

关于修改状态栏置顶功能而导致的照相机黑屏问题

作者: 冰宫无凉 | 来源:发表于2018-03-27 11:17 被阅读8次

1:当修改了状态栏的层级结构的时候,iOS8上照相机会出现黑屏。修改方法:打开照相机之前将状态栏的层级结构恢复过来,就可以了;[WNXTopWindow hide]//关闭;

.h的文件

#import@interface WNXTopWindow : NSObject

+ (void)show;

+ (void)hide;

@end

.m的文件

#import "WNXTopWindow.h"

@implementation WNXTopWindow

static UIWindow *window_;

//初始化window

+ (void)initialize {

window_ = [[UIWindow alloc] init];

window_.frame = CGRectMake(0, 0, [UIScreen mainScreen].bounds.size.width, 20);

//防止状态条出现黑屏

window_.backgroundColor = [UIColor clearColor];

window_.windowLevel = UIWindowLevelAlert;

[window_ addGestureRecognizer:[[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(windowClick)]];

}

+ (void)show {

window_.hidden = NO;

}

+ (void)hide {

window_.hidden = YES;

}

// 监听窗口点击

+ (void)windowClick {

UIWindow *window = [UIApplication sharedApplication].keyWindow;

[self searchScrollViewInView:window];

}

+ (void)searchScrollViewInView:(UIView *)superview {

for (UIScrollView *subview in superview.subviews) {

// 如果是scrollview, 滚动最顶部

if ([subview isKindOfClass:[UIScrollView class]]&&[self isShowingOnKeyWindow:subview]) {

CGPoint offset = subview.contentOffset;

offset.y = - subview.contentInset.top;

[subview setContentOffset:offset animated:YES];

}

// 递归继续查找子控件

[self searchScrollViewInView:subview];

}

}

+ (BOOL)isShowingOnKeyWindow:(UIView *)view {

// 主窗口

UIWindow *keyWindow = [UIApplication sharedApplication].keyWindow;

// 以主窗口左上角为坐标原点, 计算self的矩形框

CGRect newFrame = [keyWindow convertRect:view.frame fromView:view.superview];

CGRect winBounds = keyWindow.bounds;

// 主窗口的bounds 和 self的矩形框 是否有重叠

BOOL intersects = CGRectIntersectsRect(newFrame, winBounds);

return !view.isHidden && view.alpha > 0.01 && view.window == keyWindow && intersects;

}

@end

在App delegate里面引用

//    //延后处理,不延后会出现崩溃现象在iOS8上

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(5 * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{

//点击状态栏时界面置顶

[WNXTopWindow show];

});

相关文章

网友评论

      本文标题:关于修改状态栏置顶功能而导致的照相机黑屏问题

      本文链接:https://www.haomeiwen.com/subject/uovqrttx.html