隱藏navigationController踩過的坑

前言:開發(fā)中經(jīng)常碰到只有在首頁或者某一個頁面隱藏navigationController,其他頁面全部正常.

1.如果是這樣書寫,會出現(xiàn)點擊tabbar切換的時候,在回到需要隱藏navigationController的頁面時會出現(xiàn)nav跳動問題

- (void)viewWillAppear:(BOOL)animated {
    [super viewWillAppear:animated];
    [self.navigationController setNavigationBarHidden:YES animated:YES];
}

- (void)viewWillDisappear:(BOOL)animated {
    [super viewWillDisappear:animated];
    [self.navigationController setNavigationBarHidden:NO animated:YES];
}

正確解決方式如下:

- (void)viewWillAppear:(BOOL)animated {
    [self.navigationController setNavigationBarHidden:YES animated:NO];
    [super viewWillAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated {
    [self.navigationController setNavigationBarHidden:NO animated:NO];
    [super viewWillDisappear:animated];
}

這樣也并不完美:來看第二種異常

2.假如是在首頁隱藏nav,那么我們push到B頁在返回時在nav位置則會出現(xiàn)明顯的白色條狀,如果是使用手勢pop則更為明顯;

綜上正確解決方案如下:

- (void)viewWillAppear:(BOOL)animated {
    [self.navigationController setNavigationBarHidden:YES animated:animated];
    
    [super viewWillAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated {
    [self.navigationController setNavigationBarHidden:NO animated:animated];
    [super viewWillDisappear:animated];
}

解釋為什么要使用animated,我們點進API可以看到官方的注釋

Hide or show the navigation bar. If animated, it will transition vertically using UINavigationControllerHideShowBarDuration.

大致意思是說隱藏和顯示導航欄,如果是使用動畫效果,他將使用UINavigationControllerHideShowBarDuration垂直過渡.

還有一種方案是直接修改keywindow的背景色和nav的背景色一致來解決pop時的白條問題.

備注:如有不足請指正.

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯(lián)系作者
【社區(qū)內容提示】社區(qū)部分內容疑似由AI輔助生成,瀏覽時請結合常識與多方信息審慎甄別。
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發(fā)布,文章內容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務。

相關閱讀更多精彩內容

友情鏈接更多精彩內容