开发中会遇到这样的问题,控制台打印:
CGContextRestoreGState: invalid context 0x0. If you want to see the backtrace, please set CG_CONTEXT_SHOW_BACKTRACE environmental variable.
出错原因:设置app的状态栏样式的使用使用了旧的方式,在info.plist里面设置了View controller based status bar appearance为NO,默认为YES,
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
一般是iOS6的时候使用这种方式,iOS7,8也兼容,但是到了iOS9就报了警告。
修改方式: 将View controller-based status bar appearance设置为YES,然后使用新的方式来实现状态栏的样式。
ios7之后的方法:
- (UIStatusBarStyle)preferredStatusBarStyle;
- (UIViewController *)childViewControllerForStatusBarStyle;
- (void)setNeedsStatusBarAppearanceUpdate;
步骤如下:
1.将 View controller-based status bar appearance 删除(默认为 YES),或设置为YES
2.设置rootViewcontroller,如果为viewController,那么重写下面的方法
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
如果rootviewcontroller为navgationController,那么可以在所管理的viewcontroller里写下面的代码
self.navigationController.navigationBar.barStyle = UIBarStyleDefault;
或者为navgationcontroller写一个分类
.h
@interface UINavigationController(StatusBarStyle)
@end
.m
#import "UINavigationController+StatusBarStyle.h"
@implementation UINavigationController(StatusBarStyle)
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
@end