天天看点

【iOS开发】---- 强大的UI修改工具 UIAppearance

ios5及其以后提供了一个比较强大的工具uiappearance,可以轻松的统一你的界面,它提供如下两个方法:

+ (id)appearance

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

第一个方法是统一全部改,比如你设置uinavbar的tintcolor,你可以这样写:[[uinavigationbar appearance] settintcolor:mycolor];

第二个方法是当出现在某个类的出现时候才会改变:例如:

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

       另外其它的ui外观修改如下:

       首先定义两个值:

【iOS开发】---- 强大的UI修改工具 UIAppearance

//这样方便下面多个ui界面设置,textattributes:字体  

id appearance;  

nsdictionary *textattributes = nil;  

1.导航条

【iOS开发】---- 强大的UI修改工具 UIAppearance

代码如下:

【iOS开发】---- 强大的UI修改工具 UIAppearance

//导航条  

{  

    appearance = [uinavigationbar appearance];  

    uiimage *navbackgroundimg =[uiimage imagenamed:@"background_nav"];  

    [appearance setbackgroundimage:navbackgroundimg forbarmetrics:uibarmetricsdefault];  

}  

2.标签栏(uitabbar)

【iOS开发】---- 强大的UI修改工具 UIAppearance
【iOS开发】---- 强大的UI修改工具 UIAppearance

//标签栏  

    appearance = [uitabbar appearance];  

    uiimage *tabbarbackgroungimg =[uiimage imagenamed:@"tabbar_background"];  

    [appearance setbackgroundimage:tabbarbackgroungimg];  

    uiimage * selectionindicatorimage =[[uiimage imagenamed:@"tabbar_slider"]resizableimagewithcapinsets:uiedgeinsetsmake(4, 0, 0, 0)] ;  

    [appearance setselectionindicatorimage:selectionindicatorimage];  

3.分段控件(uisegmentcontrol)

【iOS开发】---- 强大的UI修改工具 UIAppearance
【iOS开发】---- 强大的UI修改工具 UIAppearance

//segmente未选中背景  

    //cap insets用来指定哪些区域是固定不变的,未制定的区域则会repeat  

    uiimage *segmentselected = [[uiimage imagenamed:@"bg_o.png"] resizableimagewithcapinsets:uiedgeinsetsmake(5, 5, 5, 5)];  

    uiimage *segmentunselected = [[uiimage imagenamed:@"bg.png"] resizableimagewithcapinsets:uiedgeinsetsmake(5, 5, 5, 5)];  

    uiimage *segmentselectedunselected = [uiimage imagenamed:@"line.png"] ;  

    uiimage *segunselectedselected = [uiimage imagenamed:@"line.png"] ;  

    uiimage *segmentunselectedunselected = [uiimage imagenamed:@"line.png"];  

    appearance = [uisegmentedcontrol appearance];  

    [appearance setbackgroundimage:segmentunselected  

                          forstate:statenormal  

                        barmetrics:uibarmetricsdefault];  

    //segmente选中背景  

    [appearance setbackgroundimage:segmentselected  

                          forstate:stateselected  

    //segmente左右都未选中时的分割线  

    //barmetrics表示navigation bar的状态,uibarmetricsdefault 表示portrait状态(44pixel height),uibarmetricslandscapephone 表示landscape状态(32pixel height)  

    [appearance setdividerimage:segmentunselectedunselected  

            forleftsegmentstate:statenormal  

              rightsegmentstate:statenormal  

                     barmetrics:uibarmetricsdefault];  

    [appearance setdividerimage:segmentselectedunselected  

            forleftsegmentstate:stateselected  

    [appearance setdividerimage:segunselectedselected  

              rightsegmentstate:stateselected  

    //字体  

    textattributes = [nsdictionary dictionarywithobjectsandkeys:  

                      bar_button_title_shadow_color,uitextattributetextcolor,  

                      bar_button_title_font,uitextattributefont,  

                      bar_button_title_text_color,uitextattributetextshadowcolor,  

                      [nsvalue valuewithcgsize:cgsizemake(1, 1)],uitextattributetextshadowoffset,  

                      nil];  

    [appearance settitletextattributes:textattributes forstate:1];  

                      bar_button_title_text_color,uitextattributetextcolor,  

                      bar_button_title_shadow_color,uitextattributetextshadowcolor,  

    [appearance settitletextattributes:textattributes forstate:0];  

4.uibarbutton

【iOS开发】---- 强大的UI修改工具 UIAppearance

注意:uibarbutton有leftbarbutton,rightbarbutton和backbarbutton,其中backbarbutton由于带有箭头,需要单独设置。

barbutton背景设置是ios6.0及以后的,而backbutton是ios5.0及以后的,这里要注意!

【iOS开发】---- 强大的UI修改工具 UIAppearance

//uibarbuttonitem  

    //只是修改导航条上的uibarbuttonitem  

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

    //backbarbutton和leftbarbutton,rightbarbutton的字体同时设置  

    uiimage *leftbutton = [[uiimage imagenamed:@"bgleftbutton.png"] stretchableimagewithleftcapwidth:14 topcapheight:0];  

    uiimage *normalbutton = [[uiimage imagenamed:@"bgnormalbutton.png"] resizableimagewithcapinsets:uiedgeinsetsmake(0, 5, 0, 5)];  

    //leftbarbutton,rightbarbutton背景  

    [appearance setbackgroundimage:normalbutton  

                          forstate:uicontrolstatenormal  

                             style:uibarbuttonitemstylebordered  

                          forstate:uicontrolstatehighlighted  

    //单独设置backbarbutton背景  

    [appearance setbackbuttonbackgroundimage:leftbutton  

                                    forstate:0  

                                  barmetrics:uibarmetricsdefault];  

                                    forstate:1  

    [appearance setbackbuttontitlepositionadjustment:uioffsetmake(2, -1)  

                                       forbarmetrics:uibarmetricsdefault];  

5.工具栏(uitoolbar)

【iOS开发】---- 强大的UI修改工具 UIAppearance
【iOS开发】---- 强大的UI修改工具 UIAppearance

//toolbar  

    appearance = [uitoolbar appearance];  

    //样式和背景二选一即可,看需求了  

    //样式(黑色半透明,不透明等)设置  

    [appearance setbarstyle:uibarstyleblacktranslucent];  

    //背景设置  

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

                fortoolbarposition:uitoolbarpositionany barmetrics:uibarmetricsdefault];  

}