使用uinavigationbar从视图滑动到没有

时间:2015-09-24 08:35:50

标签: ios objective-c uinavigationbar uistatusbar

我有一个带有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。

1 个答案:

答案 0 :(得分:3)

状态栏样式取决于视图控制器的- preferredStatusBarStyle,如果导航栏被隐藏,导航控制器则隐藏,因此- preferredStatusBarStyle中的NextViewController无用。

似乎该错误与导航控制器的状态栏样式有关,您可以子类UINavigationController覆盖方法childViewControllerForStatusBarStyle以避免错误。

@implementation MyNavigationController

- (UIViewController *)childViewControllerForStatusBarStyle {
    return self.topViewController;
}

@end

现在状态栏样式将取决于视图控制器,无论是否隐藏了导航栏。这个bug不会发生。