隐藏导航栏

隐藏导航栏的几种方式介绍

比较

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 就可以看出来,不建议使用第一种)

你可能感兴趣的:(隐藏导航栏)