UIAppearanceContainer 利器

这是一个很重要的protocol,而且它的代理类是UIView和UIBarItem等,UIView和UIBarItem是比较偏底层的父类,很多常用的UI系控件都继承了它们中某一个,如UIButton、UILabel、UINavigationBar、UIBarButtonItem。(网上相关资料也不多) 因为这个有个很吸引人的是实例方法

/**
自定义一个类的所有实例的外观,外观修改相关信息发送到外观的代理类。注意iOS7:UIView iOS7 tintColor属性已经,现在有特殊遗传行为UIView.h中描述。这种继承的行为可以用外表代理冲突,因此tintColor现在不允许出现代理。
**/
+ (instancetype)appearance;

现在来说说使用它的好处了 ####优点1:可以少码很多代码,节省开发时间,规范代码。 我们在创建一个类的时候会写很多相同的属性设置代码。比如一个UILabel的BackgroundColor设置,这个对设计师来说,他们一般都是设计背景色透明的,不同的iOS版本它的默认背景色有区别( iOS6默认是白色)的,一般我们在写的时候会加上一句代码 设置背景为透明。如果有N个控件 那我们可能要加近N出地方。

    [[UILabel appearance] setBackgroundColor:[UIColor clearColor]];

使用这么一句代码就能搞定

####优点2:在满足需求时,尽可能少的使用自定义控件,性能也会相对好一点 不同的app会有不同的风格,如UINavigationBar、UITabBar等的样式变化,UINavigationBar可能网上讲的方法比较多,这边就拿UITabBar来说一下吧。比如最近开发中遇到的一件事 设计看到Instagram app的底部TabBar是只有显示图片,并且高度只有44px,这与我们正常认知TabBar高度是49px有差异,第一直觉告诉我们Instagram底部状态栏是自定义实现的!但经常使用appearance,第二反应我是否可以通过它来实现。经过实践用一段简单的代码就完成了。

[[UITabBar appearance] setFrame:CGRectMake(0, SCREEN_HEIGHT-44, SCREEN_WIDTH, 44)];
//如果图片的位置需要调整 可使用下面的代码 具体位置可通过调值改变
 [[UITabBarItem appearance] setImageInsets:UIEdgeInsetsMake(5, 0, -5, 0)];

看完这个后,是不是觉得换UITabBar可以很方便,很简单。而且用系统的实现方式心里也有底,性能也比自定义实现的好多了。

####优点3:代码易管理,易迭代,在设计风格出现变动的时候可以快速的响应 因为你对整个app风格可以在一处地方可以实现,想要改动的时候自然轻松的多。如TableView的背景色设置,cell的按下状态颜色设置等等

    [[UITableView appearance] setBackgroundColor:[UIColor whiteColor]];
    UIView *cellSelectedBgView = [UIView new];
    cellSelectedBgView.backgroundColor = [UIColor yellowColor];
    [[UITableViewCell appearance] setSelectedBackgroundView:cellSelectedBgView];

转载于:https://my.oschina.net/u/1391235/blog/742323

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值