天天看點

iOS UIAppearance使用詳解

  ios5及其以後提供了一個比較強大的工具uiappearance,我們通過uiappearance設定一些ui的全局效果,這樣就可以很友善的實作ui的自定義效果又能最簡單的實作統一界面風格,它提供如下兩個方法。

+ (id)appearance

這個方法是統一全部改,比如你設定uinavbar的tintcolor,你可以這樣寫:[[uinavigationbar appearance] settintcolor:mycolor];

+ (id)appearancewhencontainedin:(class <>)containerclass,...

這個方法可設定某個類的改變:例如:設定uibarbuttonitem 在uinavigationbar、uipopovercontroller、uitabbar中的效果。就可以這樣寫

[[uibarbuttonitem appearancewhencontainedin:[uinavigationbar class], [uipopovercontroller class],[uitabbar class] nil] settintcolor:mypopovernavbarcolor];

請注意*使用appearance設定ui效果最好采用全局的設定,在所有界面初始化前開始設定,否則可能失效。

uiappearance的上述方法在協定裡面,uiview遵守并實作了協定,是以他得子類了本身才能調用這幾個方法

 具體ui外觀修改如下:

1.修改導航欄背景

代碼如下:

    uinavigationbar * appearance = [uinavigationbar appearance];

    uiimage *navbackgroundimg =[uiimage imagenamed:@"navbg.png”];

    [appearance setbackgroundimage:navbackgroundimgforbarmetrics:uibarmetricsdefault];

2.标簽欄(uitabbar)

    uitabbar *appearance = [uitabbar appearance];

    //設定背景圖檔

    [appearance setbackgroundimage:[uiimage imagenamed:@"tabbar_bg.png"]];

    //門置選擇item的背景圖檔

    uiimage *

selectionindicatorimage =[[uiimageimagenamed:@"tabbar_slider"]resizableimagewithcapinsets:uiedgeinsetsmake(4, 0, 0,0)]

;

    [appearance setselectionindicatorimage:selectionindicatorimage];

3.分段控件(uisegmentcontrol)

    uisegmentedcontrol *appearance = [uisegmentedcontrol appearance];

    //segmenteg正常背景

    [appearance setbackgroundimage:[uiimage imagenamed:@"segmente.png"]

                          forstate:uicontrolstatenormal

                        barmetrics:uibarmetricsdefault];

    //segmente選中背景

    [appearance setbackgroundimage:[uiimage imagenamed:@"segmente_a.png"]

                          forstate:uicontrolstateselected

    //segmente左右都未選中時的分割線

    //barmetrics表示navigation bar的狀态,uibarmetricsdefault 表示portrait狀态(44pixel

height),uibarmetricslandscapephone 表示landscape狀态(32pixel

height)

    [appearance setdividerimage:[uiimage imagenamed:@"segmente_line.png"]

            forleftsegmentstate:uicontrolstatenormal

              rightsegmentstate:uicontrolstatenormal

                     barmetrics:uibarmetricsdefault];

            forleftsegmentstate:uicontrolstateselected

              rightsegmentstate:uicontrolstateselected

    //字型

    nsdictionary *textattributes1 = @{uitextattributefont:

[uifont systemfontofsize:18],

                                     uitextattributetextcolor:

[uicolor bluecolor],

                                     uitextattributetextshadowcolor:

[uicolor whitecolor],

                                     uitextattributetextshadowoffset:

[nsvaluevaluewithcgsize:cgsizemake(1, 1)]};

    [appearance settitletextattributes:textattributes1 forstate:1];

    nsdictionary *textattributes2 = @{uitextattributefont:

[uicolor blackcolor],

    [appearance settitletextattributes:textattributes2 forstate:0];

4.uibarbutton

注意:uibarbutton有leftbarbutton,rightbarbutton和backbarbutton,其中backbarbutton由于帶有箭頭,需要單獨設定。

barbutton背景設定是ios6.0及以後的,而backbutton是ios5.0及以後的,這裡要注意!

    //修改導覽列上的uibarbuttonitem

    uibarbuttonitem *appearance = [uibarbuttonitem appearancewhencontainedin:[uinavigationbar class], nil];

    //設定導航欄的字型包括backbarbutton和leftbarbutton,rightbarbutton的字型

    nsdictionary *textattributes = @{uitextattributefont:

[uicolorbluecolor],

[uicolorwhitecolor],

    [appearance settitletextattributes:textattributes forstate:1];//forstate為0時為下正常狀态,為1時為點選狀态。

    //修改leftbarbutton,rightbarbutton背景效果

    [appearance setbackgroundimage:[uiimage imagenamed:@"navbarbutton.png"]

                             style:uibarbuttonitemstylebordered

    [appearance setbackgroundimage:[uiimage imagenamed:@"navbarbutton_a.png"]

                          forstate:uicontrolstatehighlighted

    //backbarbutton需要單獨設定背景效果。隻能在ios6.0以後才能用

    [appearance setbackbuttonbackgroundimage:[uiimage imagenamed:@"nav_bg.png"]

                                    forstate:0

                                  barmetrics:uibarmetricsdefault];

    [appearance setbackbuttonbackgroundimage:[uiimage imagenamed:@"work.png"]

                                    forstate:1

    [appearance setbackbuttontitlepositionadjustment:uioffsetmake(2,

-1)

                                       forbarmetrics:uibarmetricsdefault];

5.工具欄(uitoolbar)

   uitoolbar *appearance = [uitoolbar appearance];

    //樣式和背景二選一即可,看需求了

    //樣式(黑色半透明,不透明等)設定

    [appearance setbarstyle:uibarstyleblacktranslucent];

    //背景設定

    [appearance setbackgroundimage:[uiimage imagenamed:@"toolbarbg.png"]

                fortoolbarposition:uitoolbarpositionany

繼續閱讀