zoukankan      html  css  js  c++  java
  • iOS中默认样式修改-b

    项目中有大量的UITableView都需要显示sectionHeader。iOS中默认sessionHeader上的textLabel样式跟设计图不符。
    

    按照我们之前的解决方案,是在每个UITableviewController上注册sessionHeader,然后在tableView:viewForHeaderInSection:方法中重用它们,并且修改文本字体和颜色。这种方式会产生一定量的重复代码,并且不利于维护。谁知道客户会不会心血来潮让把文字改成红色……

    在这里我们打算使用+ (instancetype)appearance;方法对全局的UITableViewHeaderFooterView样式进行修改。首先尝试的代码是:

    [[UITableViewHeaderFooterView appearance].textLabel setFont:[UIFont systemFontOfSize:12]];

    发现并没有奏效,仔细阅读了一下文档发现这么一段话

    To customize the appearance of all instances of a class, send the relevant appearance modification messages to the appearance proxy for the class.

    字面上理解的应该是发送一个message到对象上,而上面的代码是对于对象的一个属性发送一个message。应该是这里的问题。

    继续阅读代码,发现另外两个方法

    + (instancetype)appearanceWhenContainedIn:(nullable Class <UIAppearanceContainer>)ContainerClass;
    
    + (instancetype)appearanceWhenContainedInInstancesOfClasses:(NSArray<Class <UIAppearanceContainer>> *)containerTypes;

    这两个方法分别对应ios9之前和之后 
    实现如下:

    #ifdef __IPHONE_9_0
        [[UILabel appearanceWhenContainedInInstancesOfClasses:@[[UITableViewHeaderFooterView class]]] setFont:[UIFont systemFontOfSize:12]];
    #else
        [[UILabel appearanceWhenContainedIn:[UITableViewHeaderFooterView class]] setFont:[UIFont systemFontOfSize:12]];
    #endif

    问题解决~

  • 相关阅读:
    codeforces 814B An express train to reveries
    codeforces 814A An abandoned sentiment from past
    codeforces 785D D. Anton and School
    codeforces 785C Anton and Fairy Tale
    codeforces 791C Bear and Different Names
    AOP详解
    Spring集成JUnit测试
    Spring整合web开发
    IOC装配Bean(注解方式)
    IOC装配Bean(XML方式)
  • 原文地址:https://www.cnblogs.com/isItOk/p/5648313.html
Copyright © 2011-2022 走看看