iOS5及其以后提供了一個(gè)比較強(qiáng)大的工具UIAppearance,我們通過UIAppearance設(shè)置一些UI的全局效果,這樣就可以很方便的實(shí)現(xiàn)UI的自定義效果又能最簡單的實(shí)現(xiàn)統(tǒng)一界面風(fēng)格,它提供如下兩個(gè)方法。
+ (id)appearance
這個(gè)方法是統(tǒng)一全部改,比如你設(shè)置UINavBar的tintColor,你可以這樣寫:[[UINavigationBar appearance] setTintColor:myColor];
+ (id)appearanceWhenContainedIn:(Class <>)ContainerClass,...
這個(gè)方法可設(shè)置某個(gè)類的改變:例如:設(shè)置UIBarButtonItem 在UINavigationBar、UIPopoverController、UITabbar中的效果。就可以這樣寫
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [UIPopoverController class],[UITabbar class] nil] setTintColor:myPopoverNavBarColor];
請(qǐng)注意*使用appearance設(shè)置UI效果最好采用全局的設(shè)置,在所有界面初始化前開始設(shè)置,否則可能失效。
支持UIAppearance協(xié)議的類可以訪問appearance selector ,它為receiver返回appearance proxy,我么可以給proxy發(fā)一些消息,諸如setTintColor:等
但是它并不是支持所有的UI類。下面列出它支持的類
1.UIActivitiIndicatorView
2.UIBarButtonItem
3.UIBarItem
4.UINavgationBar
5.UIPopoverControll
6.UIProgressView
7.UISearchBar
8.UISegmentControll
9.UISlider
10.UISwitch
11.UITabBar
12.UITabBarItem
13.UIToolBar
14.UIView
15.UIViewController
具體UI外觀修改如下:
1.修改導(dǎo)航欄背景
代碼如下:
UINavigationBar * appearance = [UINavigationBar appearance];
UIImage *navBackgroundImg =[UIImage imageNamed:@"navBg.png”];
[appearance setBackgroundImage:navBackgroundImgforBarMetrics:UIBarMetricsDefault];
2.標(biāo)簽欄(UITabbar)
代碼如下:
UITabBar *appearance = [UITabBar appearance];
//設(shè)置背景圖片
[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
barMetrics:UIBarMetricsDefault];
//Segmente左右都未選中時(shí)的分割線
//BarMetrics表示navigation bar的狀態(tài),UIBarMetricsDefault 表示portrait狀態(tài)(44pixel height),UIBarMetricsLandscapePhone 表示landscape狀態(tài)(32pixel height)
[appearance setDividerImage:[UIImage imageNamed:@"Segmente_line.png"]
forLeftSegmentState:UIControlStateNormal
rightSegmentState:UIControlStateNormal
barMetrics:UIBarMetricsDefault];
[appearance setDividerImage:[UIImage imageNamed:@"Segmente_line.png"]
forLeftSegmentState:UIControlStateSelected
rightSegmentState:UIControlStateNormal
barMetrics:UIBarMetricsDefault];
[appearance setDividerImage:[UIImage imageNamed:@"Segmente_line.png"]
forLeftSegmentState:UIControlStateNormal
rightSegmentState:UIControlStateSelected
barMetrics:UIBarMetricsDefault];
//字體
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: [UIFont systemFontOfSize:18],
UITextAttributeTextColor: [UIColor whiteColor],
UITextAttributeTextShadowColor: [UIColor blackColor],
UITextAttributeTextShadowOffset: [NSValuevalueWithCGSize:CGSizeMake(1, 1)]};
[appearance setTitleTextAttributes:textAttributes2 forState:0];
4.UIBarbutton
注意:UIBarbutton有l(wèi)eftBarButton,rightBarButton和backBarButton,其中backBarButton由于帶有箭頭,需要單獨(dú)設(shè)置。
barButton背景設(shè)置是ios6.0及以后的,而backbutton是ios5.0及以后的,這里要注意!
代碼如下:
//修改導(dǎo)航條上的UIBarButtonItem
UIBarButtonItem *appearance = [UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil];
//設(shè)置導(dǎo)航欄的字體包括backBarButton和leftBarButton,rightBarButton的字體
NSDictionary *textAttributes = @{UITextAttributeFont: [UIFontsystemFontOfSize:18],
UITextAttributeTextColor: [UIColorblueColor],
UITextAttributeTextShadowColor: [UIColorwhiteColor],
UITextAttributeTextShadowOffset: [NSValuevalueWithCGSize:CGSizeMake(1, 1)]};
[appearance setTitleTextAttributes:textAttributes forState:1];//forState為0時(shí)為下正常狀態(tài),為1時(shí)為點(diǎn)擊狀態(tài)。
//修改leftBarButton,rightBarButton背景效果
[appearance setBackgroundImage:[UIImage imageNamed:@"navBarButton.png"]
forState:UIControlStateNormal
style:UIBarButtonItemStyleBordered
barMetrics:UIBarMetricsDefault];
[appearance setBackgroundImage:[UIImage imageNamed:@"navBarButton_a.png"]
forState:UIControlStateHighlighted
style:UIBarButtonItemStyleBordered
barMetrics:UIBarMetricsDefault];
//backBarButton需要單獨(dú)設(shè)置背景效果。只能在ios6.0以后才能用
[appearance setBackButtonBackgroundImage:[UIImage imageNamed:@"nav_bg.png"]
forState:0
barMetrics:UIBarMetricsDefault];
[appearance setBackButtonBackgroundImage:[UIImage imageNamed:@"work.png"]
forState:1
barMetrics:UIBarMetricsDefault];
[appearance setBackButtonTitlePositionAdjustment:UIOffsetMake(2, -1)
forBarMetrics:UIBarMetricsDefault];
5.工具欄(UIToolbar)
UIToolbar *appearance = [UIToolbar appearance];
//樣式和背景二選一即可,看需求了
//樣式(黑色半透明,不透明等)設(shè)置
[appearance setBarStyle:UIBarStyleBlackTranslucent];
//背景設(shè)置
[appearance setBackgroundImage:[UIImage imageNamed:@"toolbarBg.png"]
forToolbarPosition:UIToolbarPositionAny
barMetrics:UIBarMetricsDefault];
更多信息請(qǐng)查看IT技術(shù)專欄