iOS5及其之后提供了一个比较强大的工具UIAppearance,能够轻松的统一你的界面,它提供以下两个方法:ios
(id)appearanceapp
(id)appearanceWhenContainedIn:(Class <>)ContainerClass,... 第一个方法是统一所有改,好比你设置UINavBar的tintColor,你能够这样写:[[UINavigationBar
appearance] setTintColor:myColor]; 第二个方法是当出如今某个类的出现时候才会改变:例如:
[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class],
[UIPopoverController class], nil] setTintColor:myPopoverNavBarColor];ide另外其它的UI外观修改以下: 首先定义两个值: [csharp] view plaincopy在CODE上查看代码片派生到个人代码片 //这样方便下面多个UI界面设置,textAttributes:字体 id appearance; NSDictionary*textAttributes = nil;
1.导航条工具
代码以下:字体
[csharp] view plaincopy在CODE上查看代码片派生到个人代码片 //导航条 {spa
appearance = [UINavigationBar appearance]; UIImage *navBackgroundImg =[UIImage imageNamed:@"background_nav"]; [appearance setBackgroundImage:navBackgroundImg forBarMetrics:UIBarMetricsDefault]; }2.标签栏(UITabbar)code
代码以下:orm
[csharp] view plaincopy在CODE上查看代码片派生到个人代码片 //标签栏 {ip
appearance = [UITabBar appearance]; UIImage *tabBarBackGroungImg =[UIImage imageNamed:@"tabbar_background"]; [appearance setBackgroundImage:tabBarBackGroungImg]; UIImage * selectionIndicatorImage =[[UIImage imageNamed:@"tabbar_slider"]resizableImageWithCapInsets:UIEdgeInsetsMake(4,0, 0, 0)] ;it
[appearance setSelectionIndicatorImage:selectionIndicatorImage]; }3.分段控件(UISegmentControl)
代码以下:
[csharp] view plaincopy在CODE上查看代码片派生到个人代码片 //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 barMetrics:UIBarMetricsDefault]; //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 rightSegmentState:stateNormal barMetrics:UIBarMetricsDefault]; [appearance setDividerImage:segUnselectedSelected forLeftSegmentState:stateNormal rightSegmentState:stateSelected barMetrics:UIBarMetricsDefault]; //字体 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]; textAttributes = [NSDictionary dictionaryWithObjectsAndKeys: BAR_BUTTON_TITLE_TEXT_COLOR,UITextAttributeTextColor, BAR_BUTTON_TITLE_FONT,UITextAttributeFont, BAR_BUTTON_TITLE_SHADOW_COLOR,UITextAttributeTextShadowColor, [NSValue valueWithCGSize:CGSizeMake(1, 1)],UITextAttributeTextShadowOffset, nil]; [appearance setTitleTextAttributes:textAttributes forState:0]; }4.UIBarbutton
注意:UIBarbutton有leftBarButton,rightBarButton和backBarButton,其中backBarButton因为带有箭头,须要单独设置。
barButton背景设置是ios6.0及之后的,而backbutton是ios5.0及之后的,这里要注意!
代码以下:
[csharp] view plaincopy在CODE上查看代码片派生到个人代码片 //UIBarButtonItem {
//只是修改导航条上的UIBarButtonItem appearance = [UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil]; //backBarButton和leftBarButton,rightBarButton的字体同时设置 textAttributes = [NSDictionary dictionaryWithObjectsAndKeys: BAR_BUTTON_TITLE_TEXT_COLOR,UITextAttributeTextColor, BAR_BUTTON_TITLE_FONT,UITextAttributeFont, BAR_BUTTON_TITLE_SHADOW_COLOR,UITextAttributeTextShadowColor, [NSValue valueWithCGSize:CGSizeMake(1, 1)],UITextAttributeTextShadowOffset, nil]; [appearance setTitleTextAttributes:textAttributes forState:0]; 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]; 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 barMetrics:UIBarMetricsDefault]; [appearance setBackgroundImage:normalButton forState:UIControlStateHighlighted style:UIBarButtonItemStyleBordered barMetrics:UIBarMetricsDefault]; //单独设置backBarButton背景 [appearance setBackButtonBackgroundImage:leftButton forState:0 barMetrics:UIBarMetricsDefault]; [appearance setBackButtonBackgroundImage:leftButton forState:1 barMetrics:UIBarMetricsDefault]; [appearance setBackButtonTitlePositionAdjustment:UIOffsetMake(2, -1) forBarMetrics:UIBarMetricsDefault]; }5.工具栏(UIToolbar)
代码以下:
[csharp] view plaincopy在CODE上查看代码片派生到个人代码片 //toolBar {
appearance = [UIToolbar appearance]; //样式和背景二选一便可,看需求了 //样式(黑色半透明,不透明等)设置 [appearance setBarStyle:UIBarStyleBlackTranslucent]; //背景设置 [appearance setBackgroundImage:[UIImage imageNamed:@"background_nav.png"] forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault]; }