一、這篇文章解決的問(wèn)題是
ios11系統(tǒng)以下,從一個(gè)需要隱藏導(dǎo)航條的視圖跳轉(zhuǎn)另一個(gè)不需要隱藏導(dǎo)航條的視圖中,假如前一個(gè)視圖需要更換狀態(tài)欄樣式,這個(gè)時(shí)候用以下代碼會(huì)導(dǎo)致使用導(dǎo)航條手勢(shì)去來(lái)回切換視圖,導(dǎo)致導(dǎo)航條丟失。
1.第一個(gè)視圖的設(shè)置導(dǎo)航條隱藏
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:YES animated:animated];
}
且通過(guò)以下方法更換狀態(tài)欄樣式
- (UIStatusBarStyle)preferredStatusBarStyle {
return UIStatusBarStyleLightContent;
}
2.第二個(gè)視圖設(shè)置導(dǎo)航條不隱藏
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
[self.navigationController setNavigationBarHidden:NO animated:animated];
}
這個(gè)時(shí)候如果使用導(dǎo)航條手勢(shì)來(lái)回切換視圖,會(huì)出現(xiàn)導(dǎo)航丟失的情況,如下圖(圖片有點(diǎn)大,稍稍的等一下吧)

image
二、解決方法如下:
1.將隱藏導(dǎo)航條的方法改為
[self.navigationController setNavigationBarHidden:YES animated: NO];
導(dǎo)航條不丟失了,但是交互效果很不友好。
2.在info.plist設(shè)置View controller-based status bar appearance為NO,使用下面的代碼更改狀態(tài)欄
[UIApplication sharedApplication].statusBarStyle = UIStatusBarStyleLightContent;
可以解決這個(gè)問(wèn)題,推測(cè)是ios11以下的系統(tǒng)對(duì)于導(dǎo)航條和狀態(tài)欄的交互處理有問(wèn)題。