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

iOS XCode6状态栏隐藏中断导航控制器,ios,xcode6,hidden,statusbar,navigationcontroller,Ios,Xcode6,Hidden,Statusbar,Navigationcontroller,我在做一个项目,XCode 6似乎带来了一些bug 描述我需要/想要什么:我想要在某个视图控制器中有一个全屏(没有状态栏) 例如: VC0(带状态栏)->VC1(不带状态栏)->VC2(带状态栏) 我已经测试了两种方法,“基于视图控制器的状态栏外观”是和否 [是] 我在VC1中将prefersStatusBarHidden设置为YES,在VC0、VC2中将其设置为NO -->XCode5,一切似乎都很好 -->XCode6,导航控制器坏了,导航条有奇怪的行为,如果我通过按钮控制器进入VC2,返回

我在做一个项目,XCode 6似乎带来了一些bug

描述我需要/想要什么:我想要在某个视图控制器中有一个全屏(没有状态栏) 例如:

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

我已经测试了两种方法,“基于视图控制器的状态栏外观”是和否

[是]
我在VC1中将prefersStatusBarHidden设置为YES,在VC0、VC2中将其设置为NO
-->XCode5,一切似乎都很好
-->XCode6,导航控制器坏了,导航条有奇怪的行为,如果我通过按钮控制器进入VC2,返回按钮进入VC0

[没有]
我将setStatusBarHidden设置为VC1中的VIEW将出现和VIEW将消失
-->XCode5,一切似乎都很好
-->XCode6中的“后退”按钮引发“在意外状态下完成导航转换。导航栏子视图树可能会损坏。”在日志中,有时,我的导航栏行为不稳定

下面是一个示例代码,用于描述:


关于这个问题的一些解决方案?

[是]

视图控制器中

- (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:)];
}
视图控制器1
中:

- (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推送到VC1时,在调用VC0的
视图将消失之前,会调用VC1中的
prefersStatusBarHidden
方法。我记录了
self.navigationController.navigationBar.backItem.title
self.navigationController.navigationBar.topItem.title
以查看发生了什么。当状态栏在VC1中隐藏时,未隐藏时日志不同,当从VC2弹出到VC1时,backItem变为nil,topItem变为VC0的标题。这不应该是,所以为了保持VC1的标题,我们需要在VC1出现时将topItem标题设置为VC1的标题

从中可以看到显示导航栏最左侧、中间和右侧内容的规则

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

[没有]

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


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

Hi gabbler,感谢您的回答。对于我的问题,使用自定义back方法的第一个解决方案似乎是一个很好的答案。你的第二个建议不符合我的要求,因为当用户用手势(交互式滑动)或按钮返回时,我需要全屏(没有状态栏)。没问题,我也认为第一个解决方案更好。