您的位置:首页 > Web前端 > CSS

iOS中默认样式修改

2016-06-29 09:32 288 查看
最近遇到这样一个场景。

项目中有大量的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


问题解决~
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: