1.iOS12及以下获取状态栏的方法(此方法在iOS13会崩溃)
UIView *statusBarView = [[UIApplication sharedApplication] valueForKeyPath:@"statusBar"];
2.iOS13上获取状态栏的方法
UIStatusBarManager *statusBarManager = [UIApplication sharedApplication].keyWindow.windowScene.statusBarManager;
if([statusBarManager respondsToSelector:@selector(createLocalStatusBar)]) {
UIView*localStatusBarView= [statusBarManager performSelector:@selector(createLocalStatusBar)];
statusBarView = [localStatusBarView performSelector:@selector(statusBar)];
//根据当前状态栏的类型,重置状态栏颜色(否则截屏出来的都是默认颜色)
UIColor*statusBarColor = [UIColorblackColor];//默认为黑色
UIStatusBarStyle statusBarStyle = self.preferredStatusBarStyle;//获取当前视图控制器的状态栏类型
if(statusBarStyle ==UIStatusBarStyleLightContent) {
statusBarColor = [UIColorwhiteColor];
}else{
/*UIStatusBarStyleDarkContent 其他类型根据需求设置不同颜色
UIStatusBarStyleBlackTranslucent
UIStatusBarStyleBlackOpaque
*/
}
/*
可以获取到UIStatusBar
UIView *statusBar = [[localStatusBarView valueForKey:@"_statusBar"] valueForKey:@"_statusBar"];
但不能改变导航栏颜色
[statusBar performSelector:@selector(setForegroundColor:) withObject:statusBarColor];
*/
[statusBarView performSelector:@selector(setForegroundColor:)withObject:statusBarColor];
}