iOS XCode6状态栏隐藏中断导航控制器

时间:2014-12-09 11:36:52

标签: ios xcode6 hidden statusbar navigationcontroller

我正在开发一个项目,而XCode 6似乎带来了一些错误。

描述我需要/想要的东西:我想要一些视图控制器中的全屏(没有状态栏) 示例:

VC0(带状态栏) - > VC1(无状态栏) - > VC2(带状态栏)

我已经测试了两种方式,使用"查看基于控制器的状态栏外观"是和否。

[有]]
我在VC1中将prefersStatusBarHidden设置为YES,在VC0,VC2中设置NO - > XCode5,似乎都很好用 - > XCode6,导航控制器坏了,导航栏有怪异的行为,如果我通过push控制器转到VC2,后退按钮转到VC0

[没有]
我在viewWillAppear中的VC1和viewWillDisappear中设置了setStatusBarHidden - > XCode5,似乎都很好用 - > XCode6,后退按钮激发"在意外状态下完成导航过渡。导航栏子视图树可能已损坏。"在日志中,有时,我的导航栏的行为不稳定。

此处的示例代码描述为:https://github.com/phetsana/statusbarnavigationcontroller

关于此的一些解决方案?

1 个答案:

答案 0 :(得分:0)

[有,是]

ViewController

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.navigationItem.leftBarButtonItem = nil;
    self.navigationController.navigationBar.topItem.title = @"VC 0";
}

- (void)prepareForSegue:(UIStoryboardSegue *)segue sender:(id)sender
{
    ViewController1 *controller = segue.destinationViewController;
    self.navigationController.navigationBar.topItem.title = @"VC 1";
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:controller action:@selector(backBtnClicked:)];
}

ViewController1

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    self.navigationItem.leftBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"Back" style:UIBarButtonItemStylePlain target:self action:@selector(backBtnClicked:)];
}

并在其头文件中添加:

- (void)backBtnClicked:(id)sender;

我注意到当从VC0推送到VC​​1时,在调用VC0的prefersStatusBarHidden之前调用VC1中的viewWillDisappear方法。我记录了self.navigationController.navigationBar.backItem.titleself.navigationController.navigationBar.topItem.title,看看发生了什么。当状态栏隐藏在VC1中时,日志在不隐藏时是不同的,当从VC2回弹到VC1时,backItem变为nil,topItem成为VC0的标题。这不应该是,所以为了保留VC1的标题,我们需要在VC1出现时将topItem标题设置为VC1的标题。

here开始,有显示导航栏最左侧,中间和右侧内容的规则。

  

如果任一视图未指定自定义栏按钮项   控制器,使用默认后退按钮,其标题设置为   上一个视图控制器的title属性的值 - 即   视图控制器在堆栈上向下一层。

[没有]

  

在意外状态下完成导航转换。   导航栏子视图树可能已损坏

这可能是由并发动画引起的,因为隐藏/显示状态栏和popviewController同时发生,在您将代码移至viewDidDisappearviewDidAppear后,警告消失。

相关问题