【注】導航控制器本身只是一個系統級別的組件,並沒有視圖,它只是一個邏輯,頁面間層級的邏輯。
【注】頁面層級 和 頁面間層級 的區別?
頁面層級——ViewController中父視圖和子視圖的層級關係。
頁面間層級——ViewController之間的層級。
註冊頁面和登陸頁面是什麼關係?
頁面間層級,登陸就是根節點
導航控制器實際上是一個ViewController的容器,它的內部存儲邏輯使用的是“棧結構”(先進後出)。
/* 棧的特殊名詞 */
1.第一個進入棧的元素叫棧基(棧底)
2.最後一個進入棧的元素叫棧頂
3.元素進入棧叫入棧
4.元素移出棧叫出棧
/* 棧的特殊名詞 */
push方法(入棧)
pop方法的行爲(出棧)
popViewController 返回上一級頁面
popToRootViewController 返回根視圖
popToViewController 返回指定的ViewController
隱藏狀態欄要修改info.plist文件
添加View controller-based status bar appearance
並且將值設置爲NO
設置 Navigation 的title顏色和statusBar 的顏色
NSDictionary *navTitle = [NSDictionary dictionaryWithObjectsAndKeys: [UIColor whiteColor],NSForegroundColorAttributeName, nil];
[self.navigationController.navigationBar setTintColor:[UIColor whiteColor]];
[self.navigationController.navigationBar setTitleTextAttributes:navTitle];
self.navigationController.navigationBar.barStyle = UIStatusBarStyleLightContent;
/*
由於ViewController並沒有銷燬,只是壓棧了。
ViewController所在的內存區域被NC持有,所以self.view還存在。
沒有銷燬,就沒有創建。所以loadView 和 viewDidLoad 都不會在執行。
當內存告警時,我們如果將self.view置空,那麼再次出現時會調用loadView和viewDidLoad。
*/
//視圖將要呈現
- (void)viewWillAppear:(BOOL)animated {
[super viewWillAppear:animated];
//隱藏NavigationBar
[self.navigationController setNavigationBarHidden:YES animated:YES];
}
- (void)viewDidLoad {
[super viewDidLoad];
/*
NavigationBar 和 toolBar
這兩個都是公共區域。OS X中的上導航也是公共區域。根據程序的不同,顯示不同的內容。
toolBar 默認是隱藏的,暫時放下不說
NavigationBar 可以自定義很多內容,左右按鈕,title,titleView等。
*/
//設置navigationBar最底層的View的背景色
// self.navigationController.navigationBar.backgroundColor = [UIColor redColor];
//設置navigationBar最上層的View的顏色
// self.navigationController.navigationBar.barTintColor = [UIColor blueColor];
//設置NavigationBar的背景圖片
/*
UIBarMetricsDefault 設置豎屏(人像模式)的背景
UIBarMetricsCompact 設置橫屏(風景模式)的背景
上導航的背景圖片嚴格要求高度,如果高度不夠,會被拉伸
工作中美工會使用高度爲64的圖片進行展示,避免狀態欄的顏色影響整體效果
*/
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navBg.png"]
forBarMetrics:UIBarMetricsDefault];
[self.navigationController.navigationBar setBackgroundImage:[UIImage imageNamed:@"navBg-32.png"]
forBarMetrics:UIBarMetricsCompact];
}