隐藏导航栏的几种方式介绍
比较
self.navigationController.navigationBar.hidden = YES;
self.navigationController.navigationBarHidden = YES;
[self.navigationController setNavigationBarHidden:YES animated:YES];
第一种方式
self.navigationController.navigationBar.hidden = YES;
UINavigationBar 继承于UIView,所以会有hidden属性。
第二种方式
self.navigationController.navigationBarHidden = YES;
UINavigationController 提供的隐藏 navigationBar 的方法。官方文档建议我们使用该方法隐藏导航栏,不要直接调用navigationBar的hidden属性。
第三种方式
[self.navigationController setNavigationBarHidden:YES animated:YES];
可以理解为第二种方式的setter方法,第二种方式默认animated = NO。
区别
使用第一种方式隐藏导航栏后,打印navigationBar信息:
frame = (0 20; 375 44); hidden = YES;
使用第二种方式隐藏导航栏后,打印navigationBar信息:
frame = (0 -44; 375 44); hidden = YES;
可见第二种方式,不仅是改变了hidden,也改变了frame。(这是iOS 10 下的测试结果,据说 iOS 11 是向左移动了。)
所以如果这两种方式交叉使用,会导致导航栏show失败,例如:使用第二种方式隐藏导航栏,再使用第一种方式显示导航栏。
官方建议
不建议使用第一种。(既然有了 navigationController.navigationBarHidden 就可以看出来,不建议使用第一种)
网友评论