我有一个带有2个viewcontrollers,ViewController和NextViewController的应用程序。 ViewController没有导航栏并且有一个白色状态栏。 NextViewController确实有一个导航栏,并有一个黑色(默认)状态栏。从NextViewController向后滑动到ViewController并取消滑动时,我遇到了一个错误,NextViewController上的导航栏将消失。故事板只有两个视图,一个按钮和一个动作segue。错误并不总是发生,但往往足以成为一个问题。该错误与方法- (UIStatusBarStyle) preferredStatusBarStyle
有关,因为当我删除方法时一切正常。
我可以以某种方式阻止此错误发生,同时我的ViewController上仍然有一个白色状态栏并启用了滑动功能,或者我是否被迫删除了这两种功能?
的ViewController
@implementation ViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self setNeedsStatusBarAppearanceUpdate];
}
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
- (UIStatusBarStyle) preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
NextViewController
@implementation NextViewController
- (void)viewDidLoad {
[super viewDidLoad];
[self setNeedsStatusBarAppearanceUpdate];
}
- (void) viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:YES];
}
-(UIStatusBarStyle)preferredStatusBarStyle{
return UIStatusBarStyleDefault;
}
其他可能相关的信息:在使用iOS 8的iPhone 5s上遇到问题,但在iOS 9的模拟器上也会发生此问题。基于控制器的状态栏外观设置为默认值YES。
答案 0 :(得分:3)
状态栏样式取决于视图控制器的- preferredStatusBarStyle
,如果导航栏被隐藏,导航控制器则隐藏,因此- preferredStatusBarStyle
中的NextViewController
无用。
似乎该错误与导航控制器的状态栏样式有关,您可以子类UINavigationController
覆盖方法childViewControllerForStatusBarStyle以避免错误。
@implementation MyNavigationController
- (UIViewController *)childViewControllerForStatusBarStyle {
return self.topViewController;
}
@end
现在状态栏样式将取决于视图控制器,无论是否隐藏了导航栏。这个bug不会发生。