从带 uinavigationbar 的视图滑动到不带 uinavigationbar 的视图时出现错误
Bug when swiping from view with uinavigationbar to one without
我有一个带有 2 个视图控制器的应用程序,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;
}
下一个ViewController
@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。
如果导航栏隐藏,状态栏样式取决于视图控制器的 - preferredStatusBarStyle
,否则取决于导航控制器,因此 NextViewController
中的 - preferredStatusBarStyle
没有用。
看来这个bug与导航控制器的状态栏样式有关,你可以子类UINavigationController
覆盖方法childViewControllerForStatusBarStyle来避免这个bug。
@implementation MyNavigationController
- (UIViewController *)childViewControllerForStatusBarStyle {
return self.topViewController;
}
@end
现在无论导航栏是否隐藏,状态栏样式都将取决于视图控制器。而且这个错误不会发生。
我有一个带有 2 个视图控制器的应用程序,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;
}
下一个ViewController
@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。
如果导航栏隐藏,状态栏样式取决于视图控制器的 - preferredStatusBarStyle
,否则取决于导航控制器,因此 NextViewController
中的 - preferredStatusBarStyle
没有用。
看来这个bug与导航控制器的状态栏样式有关,你可以子类UINavigationController
覆盖方法childViewControllerForStatusBarStyle来避免这个bug。
@implementation MyNavigationController
- (UIViewController *)childViewControllerForStatusBarStyle {
return self.topViewController;
}
@end
现在无论导航栏是否隐藏,状态栏样式都将取决于视图控制器。而且这个错误不会发生。