簡介
馬上就要開始做新的項目身笤,搭完基本框架,閑來系統(tǒng)的紀錄一下navigation相關(guān)的知識點澈歉。
開始了
目前假設(shè)有三個控制點展鸡,通過push的方法推出,具體關(guān)系如下:
vc1 -> vc2 -> vc3
接下來看我一條一條道紀錄吧埃难。
1. 看下面的動畫
現(xiàn)象:當vc1 -> vc2時莹弊,vc1的界面停留了片刻后才消失。
結(jié)論:這是因為vc2的背景顏色為nil涡尘,可以理解為clear color忍弛,因此vc1 -> vc2后,還能看到vc1上的控件考抄,知道vc2完全push出來后细疚,vc1才能完全看不見(當然,具體蘋果內(nèi)部如何實現(xiàn)push效果川梅,暫不做深究)疯兼。這個解決簡單,只要設(shè)置vc2的背景顏色不為透明色就好了贫途。
來看看實現(xiàn)效果吧~
2. navigation bar的透明度
不做任何設(shè)置時吧彪,navigation bar為半透明,如下圖:
只要設(shè)置
self.navigationController.navigationBar.translucent = NO;
就可以讓讓navigation bar變?yōu)椴煌该鳌?/p>
讓我們通過reveal展示出來的層次圖來看一下:
可以看到丢早,效果和edgesForExtendedLayout屬性為UIRectEdgeLeft|UIRectEdgeRight|UIRectEdgeBottom
的效果差不多姨裸。(具體edgesForExtendedLayout屬性,可以參考我以前的文章UIViewController中edgesForExtendedLayout屬性的研究)
3. navigation bar的tint color
默認情況下怨酝,是藍色的:
[self.navigationController.navigationBar setTintColor:[UIColor orangeColor]];
設(shè)置tintColor后傀缩,是這樣的:
4. 返回按鈕文字
如果vc1有title,則vc1 -> vc2后可以看到农猬,返回按鈕問題為前一個頁面的title赡艰;如果vc1沒有title,則vc1 -> vc2后可以看到斤葱,返回按鈕文字默認為back瞄摊。
要想自定義文字勋又,有兩種方法:
- 方法一:
self.navigationItem.backBarButtonItem = [[UIBarButtonItem alloc] initWithTitle:@"返回" style:UIBarButtonItemStylePlain target:nil action:nil];
注意:如果該代碼寫在vc2里,則vc3的返回文字才會變?yōu)椤胺祷亍被恢模绻雟c2中返回文字變?yōu)椤胺祷亍毙ㄈ溃瑒t需要在vc1中設(shè)置。
記住原理:新VC的后退按鈕文字 是 舊VC的一個屬性
- 方法2:
在被push出的controller(vc2惯驼、vc3)中添加代碼:
```Objective-C
UIBarButtonItem *item = (UIBarButtonItem *)self.navigationController.navigationBar.topItem;
item.title = @"返回";
```
如果不想要文字腫么辦蹲嚣?更簡單了,上述方法中祟牲,title(@"返回")設(shè)置為空(@"")就好了隙畜。
系統(tǒng)的返回按鈕總有一個返回箭頭,如果想要更炫的说贝,可以通過self.navigationItem.leftBarButtonItem來設(shè)置自己想要的效果议惰。
5. 背景顏色
很多時候,我們都會按平時都想法直接進行設(shè)置
self.navigationController.navigationBar.backgroundColor = [UIColor purpleColor];
但是乡恕,這樣設(shè)置會讓你大失所望言询。我們可以看下reveal的分層顯示,這個顏色設(shè)置的是navigation bar的背景顏色傲宜,但是其實navigationBar里面添加了UIView和UIImageView运杭,UILabel等控件,覆蓋了navigationBar函卒,所以這種方式設(shè)置的背景顏色在前景根本看不出來辆憔。
- 方法1:
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageWithColor:[UIColor yellowColor]] forBarMetrics:UIBarMetricsDefault];
- 方法2:
[self.navigationController.navigationBar setBarTintColor:[UIColor yellowColor]];
結(jié)束語
今天就暫時記錄到這里,后續(xù)會慢慢再補充知識點报嵌。有問題可以相互討論虱咧。