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];
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 发现 关注 消息 iOS 第三方库、插件、知名博客总结 作者大灰狼的小绵羊哥哥关注 2017.06.26 09:4...
    肇东周阅读 14,196评论 4 61
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 175,240评论 25 709
  • 清晨的闹钟准时在六点四十五分响起,我从昨夜的睡梦中惊醒,匆忙地关掉闹钟。照例要多睡个十几分钟的,让自己一点一点从慵...
    九月星辰阅读 1,072评论 1 1
  • 1 我一个朋友清清自幼长得很是漂亮。 但有一天她男朋友说要跟她分手。 原因竟然是:太胖。 天呐,清清才102斤! ...
    Danae手写你心阅读 1,228评论 0 1
  • 网络赚钱有两种方法,一种是卖实物产品,一种是虚拟产品。 要想赚钱,就得暴利。在互联网有哪些暴利产品? 大家留言。
    时海SH阅读 988评论 0 0