隱藏導(dǎo)航欄的幾種方式介紹
比較
self.navigationController.navigationBar.hidden = YES;
self.navigationController.navigationBarHidden = YES;
[self.navigationController setNavigationBarHidden:YES animated:YES];
第一種方式
self.navigationController.navigationBar.hidden = YES;
UINavigationBar 繼承于UIView,所以會(huì)有hidden屬性。
第二種方式
self.navigationController.navigationBarHidden = YES;
UINavigationController 提供的隱藏 navigationBar 的方法。官方文檔建議我們使用該方法隱藏導(dǎo)航欄,不要直接調(diào)用navigationBar的hidden屬性。
第三種方式
[self.navigationController setNavigationBarHidden:YES animated:YES];
可以理解為第二種方式的setter方法,第二種方式默認(rèn)animated = NO。
區(qū)別
使用第一種方式隱藏導(dǎo)航欄后,打印navigationBar信息:
frame = (0 20; 375 44); hidden = YES;
使用第二種方式隱藏導(dǎo)航欄后,打印navigationBar信息:
frame = (0 -44; 375 44); hidden = YES;
可見(jiàn)第二種方式,不僅是改變了hidden,也改變了frame。(這是iOS 10 下的測(cè)試結(jié)果,據(jù)說(shuō) iOS 11 是向左移動(dòng)了。)
所以如果這兩種方式交叉使用,會(huì)導(dǎo)致導(dǎo)航欄show失敗,例如:使用第二種方式隱藏導(dǎo)航欄,再使用第一種方式顯示導(dǎo)航欄。
官方建議
不建議使用第一種。(既然有了 navigationController.navigationBarHidden 就可以看出來(lái),不建議使用第一種)