您的位置:首页 > 移动开发

UIAppearance统一界面风格

2015-07-16 15:32 549 查看
转自:http://blog.csdn.net/itianyi/article/details/12647585

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

+ (id)appearance

+ (id)appearanceWhenContainedIn:(Class <>)ContainerClass,...
第一个方法是统一全部改,比如你设置UINavBar的tintColor,你可以这样写:[[UINavigationBar appearance] setTintColor:myColor];

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

[[UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], [UIPopoverController class], nil] setTintColor:myPopoverNavBarColor];

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

首先定义两个值:

[csharp] view
plaincopy

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

id appearance;

NSDictionary *textAttributes = nil;

1.导航条



代码如下:

[csharp] view
plaincopy

//导航条

{

appearance = [UINavigationBar appearance];

UIImage *navBackgroundImg =[UIImage imageNamed:@"background_nav"];

[appearance setBackgroundImage:navBackgroundImg forBarMetrics:UIBarMetricsDefault];

}

2.标签栏(UITabbar)



代码如下:

[csharp] view
plaincopy

//标签栏

{

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)



代码如下:

[csharp] view
plaincopy

//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

//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

//toolBar

{

appearance = [UIToolbar appearance];

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

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

[appearance setBarStyle:UIBarStyleBlackTranslucent];

//背景设置

[appearance setBackgroundImage:[UIImage imageNamed:@"background_nav.png"]

forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];

}

补充一个需要注意的地方:全局的设置最好在所有界面初始化前开始设置,否则可能失效。

一般写在appDelegate.m文件中。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: