7、UIViewController導航欄

概述html

上一節咱們算是跟UIViewController打了個招呼,同時也表示咱們正式介入iOS開發。本節咱們將介紹UI界面的一個經常使用元素:導航欄。dom

iOS爲UIViewController提供了內置導航欄,其界面符合iOS系統主題,同時有系統進行輔助維護,是一個很是方便的導航欄。字體

可是,無論iOS提供了多麼好用的導航欄,也沒法趕的上開發者們的想象力,有時候咱們但願自定義導航欄的樣式,這時候咱們就須要本身定製導航欄了。spa

 

內嵌導航欄3d

咱們新建1個工程Charpter7EmbeddedNavhtm

 

在Main.storyboard選中ViewController面板(對面板單擊一下鼠標便可),而後選擇Editor->Embed In->NavigationController。blog

 

因而咱們就獲得了內嵌的導航欄了,咱們能夠看到ViewController的頂部多出了1塊陰影面積,那就是導航欄。 開發

點擊導航欄,咱們就能夠在右邊的屬性欄裏修改導航欄屬性(title等)了。get

 

若是你不滿意字體的大小顏色等,還能夠點擊Navigation Controller面板頂部區域,而後修改相應的屬性。源碼

運行結果以下

 

前面咱們說過,約束(AutoLayout)是開發靜態頁面的利器,可是對動態頁面卻無能爲力,而代碼卻專長於此。添加以下圖所示代碼,它能夠根據動態條件(好比人品),使用代碼修改導航欄的標題及其顏色。其中arc4random()會返回1個整數介於0~4294967295(2^ 32-1)。至於個人人品好很差,此處就再也不展現了。

 

 

單單隻玩1個標題,彷佛還不過癮,因而咱們再拖入1個按鈕

 

改爲「+」的樣子。

 

不過癮,再來一個

 

不過癮,再來。。。反正我過癮了,大家繼續玩。

有人可能會問,這些按鈕尚未添加約束,要是運行在小屏iPhone上會不會被遮住呢?

答案是不會,理由很簡單:內嵌導航欄,iOS本身管,咱們不用瞎操心,因此無需約束,並且也添加不了約束,不信你試試。

 

自定義導航欄

內嵌導航欄雖然功能強大,可是在人類的想(zuo)象(si)力面前,仍是略顯無力。好比我吧,就很是迷信數學之美,我非得要把頁面標題放在導航欄的黃金比例分割處(0.618),不然我就感到來自APP深深的敵意。

 

首先,咱們再新建1個工程Charpter7CustomNav,而後在ViewController面板上拖入1個View

 

給拖入的View添加約束:左/上/右邊距0,高60

 

拖入1個label到剛剛添加的View中

 

修改爲我要的標題內容

 

如今我要給標題添加這樣兩條約束:

(1) title.centerY = superview.centerY

(2) title.centerX = 0.618 * superview.width

其中約束(1)能夠直接使用容器約束「Vertically in Container」,可是約束(2)須要咱們作一些修改。因而咱們先添加2條容器約束「Horizontailly in Container」和「Vertically in Containner」,而後再對「Horizontally in Container」進行修改來達到咱們的效果。

首先選中「正大光明」label,添加2條容器約束

 

當咱們想修改約束時「Horizongtally in Container」,發現其「Second Item」不能修改成「superview.width」。這是由於「First Item」(正大光明.CenterX)是位置(矢量)而「width」是尺寸(標量),因此二者不能創建相等關係,那怎麼辦呢?

 

咱們知道centerX位於width一半的位置,既然不能引用「width」,那咱們就引用「centerX」,咱們不妨建個方程:

設新系數爲P,則

title.centerX = 0.618 * superview.width = P * superview.centerX

=> 0.618 * 2 * superview.centerX = P * superview.centerX

=> P = 1.236

因而咱們將約束脩改爲下圖狀

 

太好了,終於以爲世界和平了。

 

 

總結

「導航欄」,顧名思義就是爲了引導用戶使用咱們的APP,話說咱們的APP也就1個界面,須要導航個毛線啊?!好不容易學了1個新東西,結果發現沒有什麼卵用,難免讓人有一種英雄無用,懷才不遇之感。因此下一節,咱們將介紹多UIViewController的使用。

 

源碼下載(內置導航欄):https://pan.baidu.com/s/1UgrENNxz1jrz5OO-RXUCHQ

源碼下載(自定義導航欄):https://pan.baidu.com/s/1mx5djAqpO0LP0Ep5K0IXNw

 

 

上一節           回目錄          下一節

相關文章
相關標籤/搜索