iOS中默认样式修改-b

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

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

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

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

 

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

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。应该是这里的问题。字体

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

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

 

 

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

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

 

 

问题解决~spa

相关文章
相关标签/搜索