項目中有需求,每個頁面的導航欄顏色不一樣,剛開始不覺得有什么問題,但是操作后發(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,代碼里有比較詳細的處理。
不足的地方,歡迎指出。??