iOS導航欄和狀態欄

viewController布局原理

自 iOS 7 以后蘋果開始默認對ViewController 采用全屏布局,全屏布局的意思就是ViewControllerlayout 是填滿整個屏幕的,這在 ViewController界面中有 StatusBar(20)NavigationBar(44)TabBar(49)ToolBar(44) 的時候與以往的布局方式有著明顯的差異。全屏布局的情況下,ViewControllerlayout(self.view) 會被蓋在這些 Bar 下面。

布局詳解

伴隨著全屏布局,iOS 7 以后 View Controller 添加了幾個相關的屬性來方便我們來做頁面布局:

@property (nonatomic,assign) UIRectEdge edgesForExtendedLayout NS_AVAILABLE_IOS(7_0); // Defaults to UIRectEdgeAll

@property (nonatomic,assign) BOOL extendedLayoutIncludesOpaqueBars NS_AVAILABLE_IOS(7_0); // Defaults to NO, but bars are translucent by default on 7_0. 

@property (nonatomic,assign) BOOL automaticallyAdjustsScrollViewInsets NS_AVAILABLE_IOS(7_0); // Defaults to YES
  1. edgesForExtendedLayout
    通過edgesForExtendedLayout 這個屬性來設置你的 View Controller 頁面的哪一側會延伸至屏幕邊緣。可選值為:
UIRectEdgeNone | UIRectEdgeTop | UIRectEdgeLeft | UIRectEdgeBottom | UIRectEdgeRight | UIRectEdgeAll

默認值是 UIRectEdgeAll,即 View Controller 的布局是全屏填滿。
在有NavigationBarTabBarTooBar 等系統 Bar 的情況下,該屬性設置為 UIRectEdgeAll 時,ViewController 的頁面會有一部分會被這些 Bar 蓋住部分;而當該屬性設為 UIRectEdgeNone 的時候,ViewController 的頁面布局會限制在這些 Bar 之間。

  1. extendedLayoutIncludesOpaqueBars
    這個屬性是對edgesForExtendedLayout屬性的補充。
    它的意思當 NavigationBarTabBarTooBar 這些 Bar 不是半透明時(Bar 的 translucent 屬性值為 NO),如果設置 extendedLayoutIncludesOpaqueBarsNO,則不會將 ViewController 的頁面布局延伸至全屏,如果設置為YES,則堅持延伸至全屏。
    從 iOS 7 開始,NavigationBarTabBarTooBar 這些 Bar 默認都是半透明的,這時這個屬性不會起到效果。

  2. automaticallyAdjustsScrollViewInsets
    當我們采用全屏布局設置了edgesForExtendedLayoutUIRectEdgeAll,而此時ViewControllerself.view 的第一個SubviewUIScrollView 類型或其子類型(如:UITableView 等)時,automaticallyAdjustsScrollViewInsets
    這個屬性就會被用來輔助我們對UIScrollView 類的視圖進行布局。automaticallyAdjustsScrollViewInsets 默認值即為 YES。
    UITableView 來舉例,你希望你的UITableView 的內容從 NavigationBar 底部開始展示(因為不這樣的話就會被 NavigationBar 遮住一部分),同時還需要在滑動時,UITableView 的布局又能填滿全屏。這時你只需要設置 automaticallyAdjustsScrollViewInsetsYES 即可,系統會幫你調整 UITableViewcontentInset 來實現效果使其中的內容不會被 NavigationBarTabBarToolBar 擋住。你可以同樣在 - (void)viewWillLayoutSubviews觀察UITableViewcontentInset 的值。

基礎介紹

IOS的界面分為狀態欄和導航欄,狀態欄是指顯示電池、時間的最頂部的一個窄條,高度為20個點;而導航欄是緊接著狀態欄的44個點高度的橫條,一般用于顯示app標題,返回按鈕等操作按鈕。
在ios7之前,狀態欄和導航欄是分開的,而從ios7開始狀態欄和導航欄交織在一起了,狀態欄變為透明,導航欄的高度變為44+20=64:

  1. 全局狀態欄的設置
//設置狀態欄的字體顏色模式
[[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleLightContent];
//設置狀態欄是否隱藏
[[UIApplication sharedApplication] setStatusBarHidden:YES];

我們不能隨意的對狀態欄的字體和顏色任意控制。只能設置兩種樣式。UIStatusBarStyleDefaultUIStatusBarStyleLightContent

  1. 分頁面的狀態欄的設置
    分頁面的情況下有兩種情況:
  • 當VC屬于NavigationController的時候,在VC中添加方法
-(UIStatusBarStyle)preferredStatusBarStyle
{ 
    //返回白色
    return UIStatusBarStyleLightContent;
    //返回黑色
    //return UIStatusBarStyleDefault;
}
// 隱藏狀態欄
-(BOOL)prefersStatusBarHidden {
    return YES;
}

為了保險起見,在view加載的某個階段比如viewWillAppear中執行

[self setNeedsStatusBarAppearanceUpdate];
  • 當VC屬于NavigationController的時候
self.navigationController.navigationBar.barStyle = UIBarStyleBlack;
NavigationController管理

導航欄

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,002評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,400評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 178,136評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,714評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,452評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,818評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,812評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,997評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,552評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,292評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,510評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,721評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,121評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,429評論 1 294
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,235評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,480評論 2 379

推薦閱讀更多精彩內容

  • 發現 關注 消息 iOS 第三方庫、插件、知名博客總結 作者大灰狼的小綿羊哥哥關注 2017.06.26 09:4...
    肇東周閱讀 12,170評論 4 61
  • 我又想起了417的姑娘們,417是我們大學宿舍的門牌號,也是我們大學生活四年的后宮,是我們的樂園,是我們的戰場,也...
    南木笙閱讀 463評論 0 0
  • 我總在想,總想寫,卻在提手間心生退卻,但我卻必須為他寫些什么。 如果寫,那我還是得從初中開始寫,盡管那個時候的我過...
    MG寒寒閱讀 319評論 0 0
  • 三年前,在鄭州工作的時候,老領導馬總曾講過這樣一個故事,當時令我感觸頗深。 馬總的妻妹,我們姑且稱呼她小高,90后...
    我是姜燕妮閱讀 173評論 0 1
  • 我喜歡仰望沒有一絲云彩的藍天,清澈澄明,有讓我浮躁的心平靜下來的魔力。
    333455adff2d閱讀 200評論 0 0