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];
});
}