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

简介: iOS5及其以后提供了一个比较强大的工具UIAppearance,可以轻松的统一你的界面,它提供如下两个方法: + (id)appearance + (id)appearanceWhenContainedIn:(Class <>)ContainerClass,... 第一个方法是统一全部改,比如你设置UINavBar的tintColor,你可以这样写:

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 plain copy 在CODE上查看代码片 派生到我的代码片
  1. //这样方便下面多个UI界面设置,textAttributes:字体  
  2. id appearance;  
  3. NSDictionary *textAttributes = nil;  
1.导航条

代码如下:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //导航条  
  2. {  
  3.     appearance = [UINavigationBar appearance];  
  4.     UIImage *navBackgroundImg =[UIImage imageNamed:@"background_nav"];  
  5.       
  6.     [appearance setBackgroundImage:navBackgroundImg forBarMetrics:UIBarMetricsDefault];  
  7. }  

2.标签栏(UITabbar)


代码如下:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //标签栏  
  2. {  
  3.     appearance = [UITabBar appearance];  
  4.     UIImage *tabBarBackGroungImg =[UIImage imageNamed:@"tabbar_background"];  
  5.     [appearance setBackgroundImage:tabBarBackGroungImg];  
  6.       
  7.     UIImage * selectionIndicatorImage =[[UIImage imageNamed:@"tabbar_slider"]resizableImageWithCapInsets:UIEdgeInsetsMake(4, 0, 0, 0)] ;  
  8.     [appearance setSelectionIndicatorImage:selectionIndicatorImage];  
  9. }  
3.分段控件(UISegmentControl)

代码如下:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //Segmente未选中背景  
  2. {  
  3.     //cap insets用来指定哪些区域是固定不变的,未制定的区域则会repeat  
  4.     UIImage *segmentSelected = [[UIImage imageNamed:@"bg_o.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 5, 5, 5)];  
  5.       
  6.     UIImage *segmentUnselected = [[UIImage imageNamed:@"bg.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(5, 5, 5, 5)];  
  7.       
  8.     UIImage *segmentSelectedUnselected = [UIImage imageNamed:@"line.png"] ;  
  9.       
  10.     UIImage *segUnselectedSelected = [UIImage imageNamed:@"line.png"] ;  
  11.       
  12.     UIImage *segmentUnselectedUnselected = [UIImage imageNamed:@"line.png"];  
  13.       
  14.       
  15.     appearance = [UISegmentedControl appearance];  
  16.       
  17.     [appearance setBackgroundImage:segmentUnselected  
  18.                           forState:stateNormal  
  19.                         barMetrics:UIBarMetricsDefault];  
  20.       
  21.     //Segmente选中背景  
  22.     [appearance setBackgroundImage:segmentSelected  
  23.                           forState:stateSelected  
  24.                         barMetrics:UIBarMetricsDefault];  
  25.       
  26.     //Segmente左右都未选中时的分割线  
  27.     //BarMetrics表示navigation bar的状态,UIBarMetricsDefault 表示portrait状态(44pixel height),UIBarMetricsLandscapePhone 表示landscape状态(32pixel height)  
  28.       
  29.     [appearance setDividerImage:segmentUnselectedUnselected  
  30.             forLeftSegmentState:stateNormal  
  31.               rightSegmentState:stateNormal  
  32.                      barMetrics:UIBarMetricsDefault];  
  33.       
  34.     [appearance setDividerImage:segmentSelectedUnselected  
  35.             forLeftSegmentState:stateSelected  
  36.               rightSegmentState:stateNormal  
  37.                      barMetrics:UIBarMetricsDefault];  
  38.       
  39.     [appearance setDividerImage:segUnselectedSelected  
  40.             forLeftSegmentState:stateNormal  
  41.               rightSegmentState:stateSelected  
  42.                      barMetrics:UIBarMetricsDefault];  
  43.       
  44.     //字体  
  45.     textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:  
  46.                       BAR_BUTTON_TITLE_SHADOW_COLOR,UITextAttributeTextColor,  
  47.                       BAR_BUTTON_TITLE_FONT,UITextAttributeFont,  
  48.                       BAR_BUTTON_TITLE_TEXT_COLOR,UITextAttributeTextShadowColor,  
  49.                       [NSValue valueWithCGSize:CGSizeMake(1, 1)],UITextAttributeTextShadowOffset,  
  50.                       nil];  
  51.       
  52.     [appearance setTitleTextAttributes:textAttributes forState:1];  
  53.       
  54.     textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:  
  55.                       BAR_BUTTON_TITLE_TEXT_COLOR,UITextAttributeTextColor,  
  56.                       BAR_BUTTON_TITLE_FONT,UITextAttributeFont,  
  57.                       BAR_BUTTON_TITLE_SHADOW_COLOR,UITextAttributeTextShadowColor,  
  58.                       [NSValue valueWithCGSize:CGSizeMake(1, 1)],UITextAttributeTextShadowOffset,  
  59.                       nil];  
  60.       
  61.     [appearance setTitleTextAttributes:textAttributes forState:0];  
  62. }  

4.UIBarbutton


注意:UIBarbutton有leftBarButton,rightBarButton和backBarButton,其中backBarButton由于带有箭头,需要单独设置。

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

代码如下:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //UIBarButtonItem  
  2. {  
  3.     //只是修改导航条上的UIBarButtonItem  
  4.     appearance = [UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil];  
  5.     //backBarButton和leftBarButton,rightBarButton的字体同时设置  
  6.     textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:  
  7.                       BAR_BUTTON_TITLE_TEXT_COLOR,UITextAttributeTextColor,  
  8.                       BAR_BUTTON_TITLE_FONT,UITextAttributeFont,  
  9.                       BAR_BUTTON_TITLE_SHADOW_COLOR,UITextAttributeTextShadowColor,  
  10.                       [NSValue valueWithCGSize:CGSizeMake(1, 1)],UITextAttributeTextShadowOffset,  
  11.                       nil];  
  12.       
  13.     [appearance setTitleTextAttributes:textAttributes forState:0];  
  14.       
  15.     textAttributes = [NSDictionary dictionaryWithObjectsAndKeys:  
  16.                       BAR_BUTTON_TITLE_SHADOW_COLOR,UITextAttributeTextColor,  
  17.                       BAR_BUTTON_TITLE_FONT,UITextAttributeFont,  
  18.                       BAR_BUTTON_TITLE_TEXT_COLOR,UITextAttributeTextShadowColor,  
  19.                       [NSValue valueWithCGSize:CGSizeMake(1, 1)],UITextAttributeTextShadowOffset,  
  20.                       nil];  
  21.       
  22.     [appearance setTitleTextAttributes:textAttributes forState:1];  
  23.       
  24.     UIImage *leftButton = [[UIImage imageNamed:@"bgLeftButton.png"] stretchableImageWithLeftCapWidth:14 topCapHeight:0];  
  25.       
  26.     UIImage *normalButton = [[UIImage imageNamed:@"bgNormalButton.png"] resizableImageWithCapInsets:UIEdgeInsetsMake(0, 5, 0, 5)];  
  27.       
  28.     //leftBarButton,rightBarButton背景  
  29.     [appearance setBackgroundImage:normalButton  
  30.                           forState:UIControlStateNormal  
  31.                              style:UIBarButtonItemStyleBordered  
  32.                         barMetrics:UIBarMetricsDefault];  
  33.       
  34.     [appearance setBackgroundImage:normalButton  
  35.                           forState:UIControlStateHighlighted  
  36.                              style:UIBarButtonItemStyleBordered  
  37.                         barMetrics:UIBarMetricsDefault];  
  38.       
  39.     //单独设置backBarButton背景  
  40.     [appearance setBackButtonBackgroundImage:leftButton  
  41.                                     forState:0  
  42.                                   barMetrics:UIBarMetricsDefault];  
  43.       
  44.     [appearance setBackButtonBackgroundImage:leftButton  
  45.                                     forState:1  
  46.                                   barMetrics:UIBarMetricsDefault];  
  47.       
  48.     [appearance setBackButtonTitlePositionAdjustment:UIOffsetMake(2, -1)  
  49.                                        forBarMetrics:UIBarMetricsDefault];  
  50.       
  51. }  

5.工具栏(UIToolbar)


代码如下:

[csharp]  view plain copy 在CODE上查看代码片 派生到我的代码片
  1. //toolBar  
  2. {  
  3.     appearance = [UIToolbar appearance];  
  4.     //样式和背景二选一即可,看需求了  
  5.     //样式(黑色半透明,不透明等)设置  
  6.     [appearance setBarStyle:UIBarStyleBlackTranslucent];  
  7.     //背景设置  
  8.     [appearance setBackgroundImage:[UIImage imageNamed:@"background_nav.png"]  
  9.                 forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];  
  10. }  
目录
相关文章
|
11天前
|
开发框架 JavaScript 前端开发
鸿蒙NEXT开发声明式UI是咋回事?
【10月更文挑战第15天】鸿蒙NEXT的声明式UI基于ArkTS,提供高效简洁的开发体验。ArkTS扩展了TypeScript,支持声明式UI描述、自定义组件及状态管理。ArkUI框架则提供了丰富的组件、布局计算和动画能力。开发者仅需关注数据变化,UI将自动更新,简化了开发流程。此外,其前后端分层设计与编译时优化确保了高性能运行,利于生态发展。通过组件创建、状态管理和渲染控制等方式,开发者能快速构建高质量的鸿蒙应用。
|
13天前
|
Java Android开发 Swift
安卓与iOS开发对比:平台选择对项目成功的影响
【10月更文挑战第4天】在移动应用开发的世界中,选择合适的平台是至关重要的。本文将深入探讨安卓和iOS两大主流平台的开发环境、用户基础、市场份额和开发成本等方面的差异,并分析这些差异如何影响项目的最终成果。通过比较这两个平台的优势与挑战,开发者可以更好地决定哪个平台更适合他们的项目需求。
54 1
|
20天前
|
设计模式 安全 Swift
探索iOS开发:打造你的第一个天气应用
【9月更文挑战第36天】在这篇文章中,我们将一起踏上iOS开发的旅程,从零开始构建一个简单的天气应用。文章将通过通俗易懂的语言,引导你理解iOS开发的基本概念,掌握Swift语言的核心语法,并逐步实现一个具有实际功能的天气应用。我们将遵循“学中做,做中学”的原则,让理论知识和实践操作紧密结合,确保学习过程既高效又有趣。无论你是编程新手还是希望拓展技能的开发者,这篇文章都将为你打开一扇通往iOS开发世界的大门。
|
21天前
|
搜索推荐 IDE API
打造个性化天气应用:iOS开发之旅
【9月更文挑战第35天】在这篇文章中,我们将一起踏上iOS开发的旅程,通过创建一个个性化的天气应用来探索Swift编程语言的魅力和iOS平台的强大功能。无论你是编程新手还是希望扩展你的技能集,这个项目都将为你提供实战经验,帮助你理解从构思到实现一个应用的全过程。让我们开始吧,构建你自己的天气应用,探索更多可能!
43 1
|
29天前
|
IDE Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【9月更文挑战第27天】在移动应用开发的世界中,Android和iOS是两个主要的操作系统平台。每个系统都有其独特的开发环境、工具和用户群体。本文将深入探讨这两个平台的关键差异点,并分析这些差异如何影响应用的性能、用户体验和最终的市场表现。通过对比分析,我们将揭示选择正确的开发平台对于确保项目成功的重要作用。
|
5天前
|
缓存 测试技术 C#
使用Radzen Blazor组件库开发的基于ABP框架炫酷UI主题
【10月更文挑战第20天】本文介绍了使用 Radzen Blazor 组件库开发基于 ABP 框架的炫酷 UI 主题的步骤。从准备工作、引入组件库、设计主题、集成到 ABP 框架,再到优化和调试,详细讲解了每个环节的关键点和注意事项。通过这些步骤,你可以打造出高性能、高颜值的应用程序界面。
|
14天前
|
移动开发 前端开发 Swift
iOS 最好的应用程序开发编程语言竟然是这7种
iOS 最好的应用程序开发编程语言竟然是这7种
49 8
|
12天前
|
Android开发 Swift iOS开发
探索安卓与iOS开发的差异:从代码到用户体验
【10月更文挑战第5天】在移动应用开发的广阔天地中,安卓和iOS两大平台各占半壁江山。它们在技术架构、开发环境及用户体验上有着根本的不同。本文通过比较这两种平台的开发过程,揭示背后的设计理念和技术选择如何影响最终产品。我们将深入探讨各自平台的代码示例,理解开发者面临的挑战,以及这些差异如何塑造用户的日常体验。
|
16天前
|
安全 Swift iOS开发
探索iOS开发中的Swift语言之美
在数字时代的浪潮中,移动应用已成为日常生活的延伸。本文将深入探讨iOS平台上的Swift编程语言,揭示其背后的设计哲学、语法特性以及如何利用Swift进行高效开发。我们将通过实际代码示例,展示Swift语言的强大功能和优雅简洁的编程风格,引导读者理解并运用Swift解决实际问题。
|
26天前
|
开发框架 移动开发 Android开发
安卓与iOS开发中的跨平台解决方案:Flutter入门
【9月更文挑战第30天】在移动应用开发的广阔舞台上,安卓和iOS两大操作系统各自占据半壁江山。开发者们常常面临着选择:是专注于单一平台深耕细作,还是寻找一种能够横跨两大系统的开发方案?Flutter,作为一种新兴的跨平台UI工具包,正以其现代、响应式的特点赢得开发者的青睐。本文将带你一探究竟,从Flutter的基础概念到实战应用,深入浅出地介绍这一技术的魅力所在。
65 7