iOS中默认样式修改
2016-06-29 09:32
288 查看
最近遇到这样一个场景。
按照我们之前的解决方案,是在每个UITableviewController上注册sessionHeader,然后在tableView:viewForHeaderInSection:方法中重用它们,并且修改文本字体和颜色。这种方式会产生一定量的重复代码,并且不利于维护。谁知道客户会不会心血来潮让把文字改成红色……
在这里我们打算使用+ (instancetype)appearance;方法对全局的UITableViewHeaderFooterView样式进行修改。首先尝试的代码是:
发现并没有奏效,仔细阅读了一下文档发现这么一段话
字面上理解的应该是发送一个message到对象上,而上面的代码是对于对象的一个属性发送一个message。应该是这里的问题。
继续阅读代码,发现另外两个方法
这两个方法分别对应ios9之前和之后
实现如下:
问题解决~
项目中有大量的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
问题解决~
相关文章推荐
- 全面了解html.css溢出
- CSS滤镜(Filters)
- FreeCMS商业版如何修改分页样式?
- css动画的transition渐变属性
- list-style和list-style-type
- CSS计数器的使用
- (12)用css设计电子相册 {下}
- div+css是网页排版技巧_html/css_WEB-ITnose
- CSS3动画选择
- 纯CSS创建心形翻转动画
- html中,文件上传时使用的<input type="file">的样式自定义
- css 样式使用包括样式文件导入
- CSS3阴影全接触
- CSS实现三角形
- CSS 一些知识点
- 如何将导航栏始终固定在窗口顶部:
- CSS的样式结合应用
- css position属性
- CSS
- 复选框与文字对齐的问题