- #ifdef IPHONE6
- #define kChatFontSize 16.f
- #else IPHONE6Plus
- #define kChatFontSize 18.f
- #endif
在对一些旧代码做字体适配扩大的时刻,直接修改源码修改太多,轻易纷乱,可以采取 runTime 办法 hack Label 等控件的┞饭示,调换原有的 setFont 办法:
以上套路缺点显而易见:不敷灵活,将逻辑分散,不便于保护,扩大性也不好。
字体适配:字体集
一种比较好的实践是惹人字体集(Font Collection)的概念,什么是字体集呢,我们在用 Keynote 或者 Office 的时刻,软件会供给一些段落样式,定义了段落、标题、解释等文字的字体,我们可以在不合的段落样式中切换,来直接改变┞符个文┞仿的字体风格。
听上去和我们的需求是不是很像呢,我们在代码中也是做类似的工作,将不归并景下的字体定义到一个 Font Collection 中:
- @protocol XRFontCollectionProtocol <NSObject>
- - (UIFont *)bodyFont; // 文┞仿
- - (UIFont *)chatFont; // 聊天
- - (UIFont *)titleFont; // 标题
- - (UIFont *)noteFont; // 解释
- ......
- @end
不合的场景,灵活选择不合的字体集:
- + (id<XRFontCollectionProtocol>)currentFontCollection {
- #ifdef IS_IPhone6
- return [self collectionForIPhone6];
- #elif IS_IPhone6p
- return [self collectionForIPhone6Plus];
- #endif
- return nil;
- }
- // set font
- titleLabel.font = [[XRFontManager currentFontCollection] titleFont];
适配新的屏幕或者场景,我们只须要简单地增长一套字体集就好了,可以很便利的治理 App 中的字体样式,做动态切换也很简单。
总结来说,用代码在一个尺寸实现设计稿是比较简单的,然则要在各类尺寸下忠诚反竽暌功设计的设法主意须要合理的代码设计以及必定的代码量。
UI 的还原其实也是早年端开辟异常重要的部分,作为法度榜样员,往往看重代码的稳定,营业的┞俘常应用而忽视软件界面这个同样重要的用户体验身分。设身处地地想,如不雅设计看到本身精心调配的比例、字体、色号在不合尺寸手机上显示得歪七倒八,必定会气的要逝世吧。
- + (void)load{
- Method newMethod = class_getClassMethod([self class], @selector(mySystemFontOfSize:));
- Method method = class_getClassMethod([self class], @selector(systemFontOfSize:));
- method_exchangeImplementations(newMethod, method);
- }
- + (UIFont *)mySystemFontOfSize:(CGFloat)fontSize{
- UIFont *newFont=nil;
- if (IS_IPHONE_6){
- newFont = [UIFont adjustFont:fontSize * IPHONE6_INCREMENT];
- }else if (IS_IPHONE_6_PLUS){
- newFont = [UIFont adjustFont:fontSize * IPHONE6PLUS_INCREMENT];
- }else{
推荐阅读
Tech Neo技巧沙龙 | 11月25号,九州云/ZStack与您一路商量云时代收集界线治理实践 对于电商而言,平日网站流量是靠推广得来的,常见的可以经由过程优化关键词,做外部链接,发文┞仿宣传,>>>详细阅读
本文标题:iOS屏幕适配实践浅谈
地址:http://www.17bianji.com/lsqh/38739.html
1/2 1