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];

你可能感兴趣的:(UIAppearanceContainer 利器)