ios5及其以后提供了一个比较强大的工具uiappearance,可以轻松的统一你的界面,它提供如下两个方法:
+ (id)appearance
+ (id)appearancewhencontainedin:(class <>)containerclass,...
第一个方法是统一全部改,比如你设置uinavbar的tintcolor,你可以这样写:[[uinavigationbar appearance] settintcolor:mycolor];
第二个方法是当出现在某个类的出现时候才会改变:例如:
[[uibarbuttonitem appearancewhencontainedin:[uinavigationbar class], [uipopovercontroller class], nil] settintcolor:mypopovernavbarcolor];
另外其它的ui外观修改如下:
首先定义两个值:
//这样方便下面多个ui界面设置,textattributes:字体
id appearance;
nsdictionary *textattributes = nil;
1.导航条
代码如下:
//导航条
{
appearance = [uinavigationbar appearance];
uiimage *navbackgroundimg =[uiimage imagenamed:@"background_nav"];
[appearance setbackgroundimage:navbackgroundimg forbarmetrics:uibarmetricsdefault];
}
2.标签栏(uitabbar)
//标签栏
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)
//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
注意:uibarbutton有leftbarbutton,rightbarbutton和backbarbutton,其中backbarbutton由于带有箭头,需要单独设置。
barbutton背景设置是ios6.0及以后的,而backbutton是ios5.0及以后的,这里要注意!
//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)
//toolbar
appearance = [uitoolbar appearance];
//样式和背景二选一即可,看需求了
//样式(黑色半透明,不透明等)设置
[appearance setbarstyle:uibarstyleblacktranslucent];
//背景设置
[appearance setbackgroundimage:[uiimage imagenamed:@"background_nav.png"]
fortoolbarposition:uitoolbarpositionany barmetrics:uibarmetricsdefault];
}