APP中多種樣式導航欄的處理辦法

項目中有需求,每個頁面的導航欄顏色不一樣,剛開始不覺得有什么問題,但是操作后發(fā)現(xiàn)是個坑啊,用手勢返回的時候,兩個控制器的導航欄就會出現(xiàn)奇怪的問題。導航欄作為根控制器,正常的話只有一個,更改一個頁面導航欄的顏色,另外一個就變化了。上網(wǎng)查看后,大概有幾種解決辦法。

Snip20161125_2.png
  • 方法一:使用iOS 7之后開放的,UIViewControllerAnimatedTransitioning協(xié)議,來實現(xiàn)自定義導航欄轉(zhuǎn)場動畫及交互。
  • 方法二:包裝,讓每個控制器控制器擁有自己獨立的導航欄。
  • 方法三:在每次Push前對當前頁面進行截圖并保存到數(shù)組,Pop時取數(shù)組最后一個元素顯示,滑動結(jié)束后調(diào)用系統(tǒng)Pop方法并刪除最后一張截圖。

方法一和三是參考一篇博客的(想了解的童鞋可以點擊這里了解一下),還沒有具體的實踐過,有時間還要試試。我下面重點說一下方法二,我使用的方法。

正常導航欄是不可以將導航欄添加子控制器的。我們需要進行一下包裝處理,把我們將要push的控制器包裹一層導航欄。如下

//包裝過程
-(PackViewController *)packViewController:(UIViewController *)viewController
{
    PackNavController *packNav = [[PackNavController alloc] init];

    packNav.viewControllers = @[viewController];
    
    [self addChildViewController:packNav];
    
    self.packNav = packNav;

    return self;
}
   // 注意, 這里壓入的是一個包裝過后的控制器
    PackViewController *packViewController = [[PackViewController new] packViewController:viewController];
    [self.navigationController pushViewController:packViewController animated:animated];

使用的時候

    XLNavgationController *nav = [[XLNavgationController alloc]
                                  initWithRootViewController:[[ViewController alloc] init]];
    [self.window setRootViewController:nav];
    NextViewController *push = [[NextViewController alloc] init];
    [self.navigationController pushViewController:push animated:YES];

大致這樣的過程,里面具體的實現(xiàn)可以參考Demo,代碼里有比較詳細的處理。

不足的地方,歡迎指出。??

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

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容