我正在开发一个项目,而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
关于此的一些解决方案?
答案 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推送到VC1时,在调用VC0的prefersStatusBarHidden
之前调用VC1中的viewWillDisappear
方法。我记录了self.navigationController.navigationBar.backItem.title
和self.navigationController.navigationBar.topItem.title
,看看发生了什么。当状态栏隐藏在VC1中时,日志在不隐藏时是不同的,当从VC2回弹到VC1时,backItem变为nil,topItem成为VC0的标题。这不应该是,所以为了保留VC1的标题,我们需要在VC1出现时将topItem标题设置为VC1的标题。
从here开始,有显示导航栏最左侧,中间和右侧内容的规则。
如果任一视图未指定自定义栏按钮项 控制器,使用默认后退按钮,其标题设置为 上一个视图控制器的title属性的值 - 即 视图控制器在堆栈上向下一层。
[没有]
在意外状态下完成导航转换。 导航栏子视图树可能已损坏
这可能是由并发动画引起的,因为隐藏/显示状态栏和popviewController同时发生,在您将代码移至viewDidDisappear
和viewDidAppear
后,警告消失。