美文网首页
UIAppearanceContainer 利器

UIAppearanceContainer 利器

作者: wesk痕 | 来源:发表于2016-08-31 18:12 被阅读0次

    这是一个很重要的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 利器

          本文链接:https://www.haomeiwen.com/subject/brpqettx.html