【iOS开发】---- 强大的UI修改工具 UIAppearance-有图片效果

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

+ (id)appearance

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

第一个方法是统一全部改,比如你设置UINavBar的tintColor,你可以这样写:[[UINavigationBar appearance] setTintColor:myColor];
第二个方法是当出现在某个类的出现时候才会改变:例如:

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

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

 

       首先定义两个值:

//这样方便下面多个UI界面设置,textAttributes:字体  
id appearance;  
NSDictionary *textAttributes = nil;  

1.导航条

代码如下:

//导航条  
{  appearance = [UINavigationBar appearance];  UIImage *navBackgroundImg =[UIImage imageNamed:@"background_nav"];  [appearance setBackgroundImage:navBackgroundImg forBarMetrics:UIBarMetricsDefault];  
}  

 

2.标签栏(UITabbar)

 

代码如下:

//标签栏  
{  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)

代码如下:

 

//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及以后的,这里要注意!

代码如下:

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

 

代码如下:

 

//toolBar  
{  appearance = [UIToolbar appearance];  //样式和背景二选一即可,看需求了  //样式(黑色半透明,不透明等)设置  
    [appearance setBarStyle:UIBarStyleBlackTranslucent];  //背景设置  [appearance setBackgroundImage:[UIImage imageNamed:@"background_nav.png"]  forToolbarPosition:UIToolbarPositionAny barMetrics:UIBarMetricsDefault];  
}  

 

 

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

 

 

 

 

 

 

 

 

转载于:https://www.cnblogs.com/yipingios/p/5531250.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/372961.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

7月9日王者荣耀服务器维护,王者荣耀 7月9日体验服停机更新公告

亲爱的召唤师&#xff1a;为了增加版本的稳定性&#xff0c;我们计划在2021年7月9日16:00-17:00对《王者荣耀》体验服进行停机维护。【更新时间】7月9日16:00-17:00(15:30关闭PVP)【更新方式】停机更新【更新范围】王者荣耀修炼之地体验服【下载地址】体验服更新完毕后&#xf…

使用Jetty设置JNDI(嵌入式)

我在开发工作区上运行嵌入式Jetty&#xff0c;从而节省了一些编译和部署恶性循环的时间。 我与Jetty的合作不多&#xff0c;易用性使我着迷于它。 我需要设置JNDI才能检索与数据库相关的活动的连接池。 尽管某些地方有完整的文档&#xff0c;但大多数都是分散的。 因此&#xf…

交华为换机access配置_华为交换机Hybrid接口及基础配置

一、回顾VLANVLAN基本概念VLAN即虚拟局域网&#xff0c;是将一个物理的LAN在逻辑上划分成多个广播域(多个VLAN)的通信技术。VLAN内的主机间可以直接通信&#xff0c;而VLAN间不能直接互通&#xff0c;从而将广播报文限制在一个VLAN内。由于VLAN之间的隔离&#xff0c;所以一些类…

HttpClient使用之下载远程服务器中的文件(注意目录遍历漏洞)

参考文献&#xff1a; http://bbs.csdn.net/topics/390952011 http://blog.csdn.net/ljj_9/article/details/53306468 1.下载地址 http://hc.apache.org/downloads.cgi Apache-》Projects-》HttpComponents 2.DownloadServlet 1 package com.servlet;2 3 import java.io.Buffer…

HDOJ-1263

水果 Time Limit: 2000/1000 MS (Java/Others) Memory Limit: 65536/32768 K (Java/Others)Total Submission(s): 5303 Accepted Submission(s): 2022 Problem Description夏天来了~~好开心啊,呵呵,好多好多水果~~Joe经营着一个不大的水果店.他认为生存之道就是经营最受顾…

django ajax form表单,Django学习系列之Form表单和ajax(示例代码)

昵 称&#xff1a;生 日&#xff1a;性 别&#xff1a; 男 女地 址&#xff1a;手 机 号&#xff1a;邮 箱&#xff1a;[修改]{% csrf_token %}$(\#jsEditUserBtn\).on(\click\, function(){var _self $(this),$jsEditUserForm $(\#…

git push 的符号笔有什么用_如何同步多个 git 远程仓库

点击上方“后端技术精选”&#xff0c;选择“置顶公众号”技术文章第一时间送达&#xff01;作者&#xff1a;taadismy.oschina.net/taadis/blog/3073220题外话&#xff0c;开发中遇到问题或者学习新技术时缺少交流环境&#xff0c;可以点击加入【后端技术交流群】日常需求以前…

Java EE重新审视设计模式:观察者

除了以多种语言和许多应用程序实现之外&#xff0c;Observer Pattern自1.0版以来一直是Java的一部分。 观察者模式也是好莱坞原则的良好实施。 就像好莱坞的特工喜欢回调候选人以代替某个职位&#xff0c;而不是每天被要求询问可用工作一样&#xff0c;大多数服务器端资源&…

POI搜索简介

用户输入——用户输出-----------------------------------------------------------而POI搜索引擎&#xff0c;需要做的就是拿到输入条件&#xff0c;给出用户比较满意的结果。用户角度&#xff1a;输入&#xff1a;尽量简单&#xff0c;且符合心意输入时的假设&#xff1a;假…

2、Spring的 IoC详解(第一个Spring程序)

Spring是为了解决企业应用开发的复杂性而创建的一个轻量级的控制反转&#xff08;IoC&#xff09;和面向切面&#xff08;AOP&#xff09;的容器框架。在这句话中重点有两个&#xff0c;一个是IoC&#xff0c;另一个是AOP。今天我们讲第一个IoC。 一. IoC理论的背景 我们都知道…

排除服务器简单系统故障方法,引导CD排除服务器故障方法有哪些?

尽管Linux系统以稳定可靠著称&#xff0c;但由于硬件问题有时仍会崩溃/或无法引。针对这一问题&#xff0c;最好的解决办法就是使用Linux系统引导CD。为了方便读者&#xff0c;笔者在下面列出了安装Red Hat Linux 8。0的最必须步骤。为安装过程作笔记在Red Hat Linux系统典型安…

js 获取father_(原创)Node.JS实战26:强大的工作池。收藏吧!你一定会用的到。...

在实际项目中&#xff0c;如果遇到需要大计算量的操作&#xff0c;按需fork&#xff08;分叉&#xff09;其实不是一个好的选择。因为fork的子进程也是V8&#xff08;NodeJS的核心引擎&#xff09;的新实例&#xff0c;每创建一个新实例&#xff0c;需要约30毫秒启动时间&#…

具有ReadWriteLock的Java并发

编写多线程Java应用程序并不是小菜一碟。 必须格外小心&#xff0c;因为同步不良会使您的应用程序一s不振。 JVM堆由所有线程共享。 如果多个线程需要同时使用相同的对象或静态类变量&#xff0c;则必须谨慎管理对共享数据的线程访问。 从1.5版开始&#xff0c;JSDK中包含了在并…

修复steam服务器失败,steam服务器链接失败

steam服务器链接失败 内容精选换一换当NTP服务器异常时产生该告警。当NTP服务器异常消除时&#xff0c;该告警恢复。主OMS节点配置的NTP服务器异常&#xff0c;可能会导致主OMS节点与外部服务器不能同步时间&#xff0c;集群时间可能会产生飘移。NTP服务器网络异常。与NTP服务器…

qemu-kvm简单使用

qemu-kvm主要有以下几个选项: -snapshot: 创建快照-m: 指定内存大小-smp: 指定处理器个数-cpu: 指定CPU类型-name: 设置虚拟机名称-vnc: 使用vnc连接-boot: 指定启动相关的选项-net: 指定网卡相关的选项-drive: 指定硬盘/光盘相关的选项qemu-kvm -m 128 -name first -smp 2 -dr…

将jar添加到发布目录_第32批免购置税新能源车型目录发布;通用BEV3平台将入华...

1、第32批免购置税新能源车型目录发布&#xff0c;几何X/理想ONE等283款车型入选6月2日&#xff0c;工信部发布《免征车辆购置税的新能源汽车车型目录(第三十二批)》&#xff0c;共有283款新能源车型入选。其中新能源乘用车方面包括&#xff0c;一汽大众Q2L/e-BORA、东风风神E7…

HPROF –内存泄漏分析教程

本文将为您提供有关如何通过生成和分析Sun HotSpot JVM HPROF堆转储文件来分析JVM内存泄漏问题的教程。 一个现实的案例研究将用于此目的&#xff1a;Weblogic 9.2内存泄漏影响Weblogic Admin服务器。 环境规格 Java EE服务器&#xff1a;Oracle Weblogic Server 9.2 MP1 中…

mq服务器与客户端消息同步,使用 ActiveMQ 实现JMS 异步调用

目录简介服务之间的同步调用&#xff0c;可以使用 HTTP 或 RPC 来完成&#xff0c;但并非所有的调用都需要同步&#xff0c;有些场景下&#xff0c;当客户端调用服务端时&#xff0c;并不需要等待服务端做出响应&#xff0c;此时就应该使用异步调用。异步调用的常用方式是基于 …

多个数字数组_七个问题帮助初学者深入理解Java数组

短文涨姿势&#xff0c;看了不白看&#xff0c;不关注等啥&#xff1f;几乎所有的高级语言当中&#xff0c;都提供了一种叫做”数组”的东西&#xff0c;Java语言当然也不例外。我们通过数组可以很方便的存储和管理一组数据。因为在Java语言当中使用数组非常的方便&#xff0c;…

java 异常练习题1

建立exception包&#xff0c;建立Bank类&#xff0c;类中有变量double balance表示存款,Bank类的构造方法能增加存款&#xff0c;Bank类中有取款的发方法withDrawal(double dAmount),当取款的数额大于存款时,抛出InsufficientFundsException,取款数额为负数&#xff0c;抛出Nag…