iOS UIAppearance使用详解

简介: <p style="margin-top:0px; margin-bottom:0px; padding-top:0px; padding-bottom:0px; border:0px; list-style:none; word-wrap:normal; word-break:normal; color:rgb(73,73,73); font-size:14px; font-family

  iOS5及其以后提供了一个比较强大的工具UIAppearance,我们通过UIAppearance设置一些UI的全局效果,这样就可以很方便的实现UI的自定义效果又能最简单的实现统一界面风格,它提供如下两个方法。

+ (id)appearance

这个方法是统一全部改,比如你设置UINavBar的tintColor,你可以这样写:[[UINavigationBar appearance] setTintColor:myColor];


+ (id)appearanceWhenContainedIn:(Class <>)ContainerClass,...

这个方法可设置某个类的改变:例如:设置UIBarButtonItem 在UINavigationBar、UIPopoverController、UITabbar中的效果。就可以这样写

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


请注意*使用appearance设置UI效果最好采用全局的设置,在所有界面初始化前开始设置,否则可能失效。

UIAppearance的上述方法在协议里面,UIView遵守并实现了协议,所以他得子类了本身才能调用这几个方法

 具体UI外观修改如下:


1.修改导航栏背景

代码如下:

    UINavigationBar * appearance = [UINavigationBar appearance];

    UIImage *navBackgroundImg =[UIImage imageNamed:@"navBg.png”];

    

    [appearance setBackgroundImage:navBackgroundImgforBarMetrics:UIBarMetricsDefault];


2.标签栏(UITabbar

代码如下:

    UITabBar *appearance = [UITabBar appearance];

    //设置背景图片

    [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左右都未选中时的分割线

    //BarMetrics表示navigation bar的状态,UIBarMetricsDefault 表示portrait状态(44pixel height),UIBarMetricsLandscapePhone 表示landscape状态(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(11)]};

    

    [appearance setTitleTextAttributes:textAttributes1 forState:1];

    

    NSDictionary *textAttributes2 = @{UITextAttributeFont: [UIFont systemFontOfSize:18],

                                     UITextAttributeTextColor: [UIColor whiteColor],

                                     UITextAttributeTextShadowColor: [UIColor blackColor],

                                     UITextAttributeTextShadowOffset: [NSValuevalueWithCGSize:CGSizeMake(11)]};

    

    [appearance setTitleTextAttributes:textAttributes2 forState:0];



4.UIBarbutton

注意UIBarbuttonleftBarButtonrightBarButtonbackBarButton,其中backBarButton由于带有箭头,需要单独设置。

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

代码如下:

    //修改导航条上的UIBarButtonItem

    UIBarButtonItem *appearance = [UIBarButtonItem appearanceWhenContainedIn:[UINavigationBar class], nil];


    //设置导航栏的字体包括backBarButtonleftBarButtonrightBarButton的字体

    NSDictionary *textAttributes = @{UITextAttributeFont: [UIFont systemFontOfSize:18],

                                     UITextAttributeTextColor: [UIColorblueColor],

                                     UITextAttributeTextShadowColor: [UIColorwhiteColor],

                                     UITextAttributeTextShadowOffset: [NSValuevalueWithCGSize:CGSizeMake(11)]};

    

    [appearance setTitleTextAttributes:textAttributes forState:1];//forState0时为下正常状态,为1时为点击状态。


    

    //修改leftBarButtonrightBarButton背景效果

    [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需要单独设置背景效果。只能在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];

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

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

    [appearance setBarStyle:UIBarStyleBlackTranslucent];

    //背景设置

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

                forToolbarPosition:UIToolbarPositionAny

                        barMetrics:UIBarMetricsDefault];


目录
相关文章
|
1月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
85 3
|
3月前
|
存储 iOS开发
iOS 开发,如何进行应用的本地化(Localization)?
iOS 开发,如何进行应用的本地化(Localization)?
122 2
|
3月前
|
存储 数据建模 数据库
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
IOS开发数据存储:什么是 UserDefaults?有哪些替代方案?
39 0
|
3月前
|
安全 编译器 Swift
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
IOS开发基础知识: 对比 Swift 和 Objective-C 的优缺点。
91 2
|
3月前
|
API 开发工具 iOS开发
iOS 开发高效率工具包:10 大必备工具
iOS 开发高效率工具包:10 大必备工具
47 1
|
3月前
|
API 数据安全/隐私保护 iOS开发
利用uni-app 开发的iOS app 发布到App Store全流程
利用uni-app 开发的iOS app 发布到App Store全流程
54 1
|
6天前
|
API 定位技术 iOS开发
IOS开发基础知识:什么是 Cocoa Touch?它在 iOS 开发中的作用是什么?
【4月更文挑战第18天】**Cocoa Touch** 是iOS和Mac OS X应用的核心框架,包含面向对象库、运行时系统和触摸优化工具。它提供Mac验证的开发模式,强调触控接口和性能,涵盖3D图形、音频、网络及设备访问API,如相机和GPS。是构建高效iOS应用的基础,对开发者至关重要。
11 0
|
21天前
|
开发工具 Swift iOS开发
利用SwiftUI构建动态用户界面:iOS开发新范式
【4月更文挑战第3天】 随着苹果不断推进其软件开发工具的边界,SwiftUI作为一种新兴的编程框架,已经逐渐成为iOS开发者的新宠。不同于传统的UIKit,SwiftUI通过声明式语法和强大的功能组合,为创建动态且响应式的用户界面提供了一种更加简洁高效的方式。本文将深入探讨如何利用SwiftUI技术构建具有高度自定义能力和响应性的用户界面,并展示其在现代iOS应用开发中的优势和潜力。
|
2月前
|
监控 API Swift
用Swift开发iOS平台上的上网行为管理监控软件
在当今数字化时代,随着智能手机的普及,人们对于网络的依赖日益增加。然而,对于一些特定场景,如家庭、学校或者企业,对于iOS设备上的网络行为进行管理和监控显得尤为重要。为了满足这一需求,我们可以利用Swift语言开发一款iOS平台上的上网行为管理监控软件。
196 2
|
3月前
|
数据可视化 iOS开发
iOS 开发,什么是 Interface Builder(IB)?如何使用 IB 构建用户界面?
iOS 开发,什么是 Interface Builder(IB)?如何使用 IB 构建用户界面?
40 4