UIViewControllerBasedStatusBarAppearance = YES的时候
使用UIImagePickerController的时候, 如何修改状态栏的颜色?
1 . 所有的模态视图都可以通过分类覆盖preferredStatusBarStyle方法来修改视图状态栏样式(比如UIAlertController)
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
2 . 因为UIImagePickerController继承UINavigationController
所以需要覆盖childViewControllerForStatusBarStyle方法, 保险起见, 我依旧覆盖了preferredStatusBarStyle方法. 记忆中两个方法都管用
(实际上, 如果childViewControllerForStatusBarStyle的返回值不为空, NavigationController是不会调用preferredStatusBarStyle方法的, 状态栏也会是childViewController中设置的样式, 所以如下写法其实是黑科技...虽然效果一致)
- (UIStatusBarStyle)preferredStatusBarStyle {
return self.visibleViewController.preferredStatusBarStyle;
}
- (UIViewController *)childViewControllerForStatusBarStyle {
UIViewController *viewController = self.visibleViewController;
return viewController;
}
到此为止, 进入相册可以看到状态栏已经是自己期望的样式, 但是退出相册的时候发现状态栏又变成了默认的样式(鬼知道是为什么). 所以还需要完成下面这一步
3 . UIImagePickerController的根视图是PUAlbumListViewController类, 可惜苹果并没有公开这个类, 我只好写了个UIViewController分类, 同样是覆盖preferredStatusBarStyle方法
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}