首先navgationBar 是這個(gè)東西

如果使用下邊的代碼隱藏NavgationBar
// 隱藏控制器的navBar
self.navgationController.navgationBar.hidden = YES;
不能及時(shí)的隱藏navBar,并出現(xiàn)了兩個(gè)問(wèn)題:
1. navgationBar隱藏不及時(shí),出現(xiàn)布局問(wèn)題
1)用下邊的參數(shù)布局,會(huì)出現(xiàn)tableView頂?shù)筋^,被navBar蓋住的情況
// 顯示navBar
self.navgationController.navgationBar.hidden = NO;
// 設(shè)置表格frame
[self.tableView setFrame:CGRectMake(0, 0, 375, 200)];
[self.tableView addSubViews:_tableView];
2)用下邊的參數(shù)布局,一直在當(dāng)前頁(yè)面,直觀看,沒(méi)有任何問(wèn)題,但是?。?!關(guān)鍵是但是!如果你在當(dāng)前頁(yè)面,push到下個(gè)頁(yè)面,在pop回來(lái)的時(shí)候,你會(huì)發(fā)現(xiàn),tableView和navBar 中間隔了64 的空白,很二逼的樣子
// 顯示navBar
self.navgationController.navgationBar.hidden = NO;
// 設(shè)置表格frame
[self.tableView setFrame:CGRectMake(0, 64, 375, 200)];
[self.tableView addSubViews:_tableView];
以上兩種問(wèn)題,我懷疑是navBarf出現(xiàn)不及時(shí),設(shè)置frame的時(shí)候,布局會(huì)出錯(cuò)
2.navgationBar 混亂問(wèn)題
當(dāng)視圖出現(xiàn)的時(shí)候,隱藏navBar,消失的時(shí)候顯示navBar,這樣如果正常push到下一個(gè)視圖控制器,在正常的pop回本視圖控制器,沒(méi)有什么問(wèn)題,但是,蘋果有個(gè)側(cè)滑pop視圖控制器的特點(diǎn),當(dāng)你不松手,來(lái)回側(cè)滑,就可能出現(xiàn)本控制器的navgationBar,顯示在二級(jí)控制器的頁(yè)面,或者二級(jí)控制器的navgationBar出現(xiàn)在本控制器的頁(yè)面
-(void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
//視圖將要出現(xiàn)的時(shí)候隱藏Bar
self.navgatrionController.navgationBar.hidden = YES;
}
-(void)viewWillDisappear:(BOOL)animated {
[super viewWillDisappear:animated];
//視圖將要消失的時(shí)候展現(xiàn)Bar
self.navgationController.navgationBar.hidden = NO;
}
解決辦法
用下面的方法設(shè)置navgationBar,所有上述問(wèn)題,就解決了
//顯示navgationBar
[self.navigationController setNavigationBarHidden:NO animated:YES];
//隱藏navgationBar
[self.navigationController setNavigationBarHidden:YES animated:YES];
原因分析
到底為什么會(huì)出現(xiàn)上述情況呢?
navigationBar.hidden是對(duì)一個(gè)對(duì)象進(jìn)行隱藏,而navigationBarHidden是navigationController 的一個(gè)屬性,會(huì)隱藏整個(gè)navigationController