項(xiàng)目中有需求捷凄,每個(gè)頁面的導(dǎo)航欄顏色不一樣娃闲,剛開始不覺得有什么問題虚汛,但是操作后發(fā)現(xiàn)是個(gè)坑啊,用手勢(shì)返回的時(shí)候皇帮,兩個(gè)控制器的導(dǎo)航欄就會(huì)出現(xiàn)奇怪的問題卷哩。導(dǎo)航欄作為根控制器,正常的話只有一個(gè)属拾,更改一個(gè)頁面導(dǎo)航欄的顏色将谊,另外一個(gè)就變化了。上網(wǎng)查看后渐白,大概有幾種解決辦法尊浓。
Snip20161125_2.png
- 方法一:使用iOS 7之后開放的,UIViewControllerAnimatedTransitioning協(xié)議纯衍,來實(shí)現(xiàn)自定義導(dǎo)航欄轉(zhuǎn)場動(dòng)畫及交互眠砾。
- 方法二:包裝,讓每個(gè)控制器控制器擁有自己獨(dú)立的導(dǎo)航欄。
- 方法三:在每次Push前對(duì)當(dāng)前頁面進(jìn)行截圖并保存到數(shù)組褒颈,Pop時(shí)取數(shù)組最后一個(gè)元素顯示,滑動(dòng)結(jié)束后調(diào)用系統(tǒng)Pop方法并刪除最后一張截圖励堡。
方法一和三是參考一篇博客的(想了解的童鞋可以點(diǎn)擊這里了解一下),還沒有具體的實(shí)踐過谷丸,有時(shí)間還要試試。我下面重點(diǎn)說一下方法二应结,我使用的方法刨疼。
正常導(dǎo)航欄是不可以將導(dǎo)航欄添加子控制器的。我們需要進(jìn)行一下包裝處理鹅龄,把我們將要push的控制器包裹一層導(dǎo)航欄揩慕。如下
//包裝過程
-(PackViewController *)packViewController:(UIViewController *)viewController
{
PackNavController *packNav = [[PackNavController alloc] init];
packNav.viewControllers = @[viewController];
[self addChildViewController:packNav];
self.packNav = packNav;
return self;
}
// 注意, 這里壓入的是一個(gè)包裝過后的控制器
PackViewController *packViewController = [[PackViewController new] packViewController:viewController];
[self.navigationController pushViewController:packViewController animated:animated];
使用的時(shí)候
XLNavgationController *nav = [[XLNavgationController alloc]
initWithRootViewController:[[ViewController alloc] init]];
[self.window setRootViewController:nav];
NextViewController *push = [[NextViewController alloc] init];
[self.navigationController pushViewController:push animated:YES];
大致這樣的過程,里面具體的實(shí)現(xiàn)可以參考Demo扮休,代碼里有比較詳細(xì)的處理迎卤。
不足的地方,歡迎指出玷坠。??