屏幕适配的一些小经验

喜欢的明星之一 [邓紫棋]

本人系公司的里小小开发人员一枚,从新拿到原型图.app里除了网络请求等一些基本的数据模型外,几乎都是重新写的.有感于以前不喜欢做界面,侧重在处理逻辑部分,所以一开始写界面的时候还是有些疑问的.现在公司是我一个独立开发,什么业务逻辑都是自己处理的,但是什么都是不专业的,万金油牌.

言归正传,说说今天的主题吧 -> 关于适配

1. 首先一点,能自动布局就自动布局吧,采用算距离和高度方式太low了

为什么建议自动布局,可能这观点有很多人不认同,尤其是三四年从事iOS工作经验的,自动布局是一种趋势吧,你看安卓,H5等等,算距离和高度真的严重out了,新技术还是要跟进的,可以更加专注业务逻辑的部分,而不是全部布局全都是calulate.如果别人接手改UI的时候估计也不想改的,干脆把你的重写一遍.如果遇到是cell的布局还先算frame值的,我的天,差不多从接手到重写.,另外,有人说计算frame值得cell滑动很流畅啊,对,这是确实,如果是业务要求非常流畅的确实需要,但是大部分都是不重要的,重要的是你能处理好逻辑就行,用一些缓存行高的的自动布局就行了,何必花在布局上这么久时间

2. 用xib还是代码?-->两个都要会,但是代码一定要用的好

面试的时候你要说是用xib,估计十有八九的人会说你技术不咋地,因为大部分的公司代码还是用纯代码写的,团队开发咋得怎么可能让写xib,而且xib很容易改一个东西会报错,其中关于cell的布局在xib有一个坑,需要自己领悟领悟,这点在后面会进行说明,而且用代码的工作量也是不大的,布局靠想象,当锻炼思维吧.建议--> 个人开发的时候若是项目非常赶,拉一点控件还是可以的.基本点,简单的用xib布局快,用代码也快,复杂的用xib做不了,用代码可以做

3. 用纯代码布局如图的时候

图纸.png

给出的设计图按照设计师给出的圆形图,咋一样看上去很简单的一个圆形图,页面简单,控件才几个,但是真正做的时候却傻眼了,为什么,这是一张需要按照全局比例进行缩放的比例图,不是单靠一张标注好的px图就可以进行适配的,就是根据屏幕大小设置空间大小,根据屏幕大小设置左右适配的距离,再换言之,就是设置四五套大小和距离.一开始我就是这么样做的,后来抽取出来工具类来计算,这么是最好的办法

适配的基本原则,

距离要按照比例进行适配,字体要根据屏幕的比例进行适配,只有这么样做,才算是比较标准的,同时还要针对4s~5s进行一小部分适配,因为按照比例更加宽.

思考一个环节,如何抽取一个一个类,改变最少的内容做最的大限度的事情

想法有几种,

  • 建立相关的父类,所有需要改变的类都继承于它,这是最好理解的一种方法,只需要建一个UILabel的父类,举例说:framLabel,在这个frameLabel的iniWithFont里面进行设置

  • 通过运行时分别交换UILable的 initWithCoder: ,initWithFrame:方法.

如下代码

    Method imp = class_getInstanceMethod([self class], @selector(initWithCoder:));
Method myImp = class_getInstanceMethod([self class], @selector(myInitWithCoder:));
method_exchangeImplementations(imp, myImp);

Method cmp = class_getInstanceMethod([self class], @selector(initWithFrame:));
Method myCmp = class_getInstanceMethod([self class], @selector(myInitWithFrame:));
method_exchangeImplementations(cmp, myCmp);        
  • 宏定义宽高,这个是网上看到的原文在iOS 控件宽高字体大小适配方法,这也是比较容易实现的方法,作者那里有,这里简单说一下,在pch文件里define两个宏定义
    #define autoScaleW(width) [(AppDelegate *)[UIApplication sharedApplication].delegate autoScaleW:width]
    #define autoScaleH(height) [(AppDelegate *)[UIApplication sharedApplication].delegate autoScaleH:height]
    然后写控件的时候后设置字体大小
    [UIFont systemFontOfSize:autoScaleW(14)]

这是关于距离的适配

距离适配的思想和字体的适配也是类似的,都有着三种适配的方式,通过运行时更改项目的设置方法
#import "NSLayoutConstraint+layoutSize.h"
#import <objc/runtime.h>
#import "NSString+Manager.h"
#define ScrenScaleHeight [UIScreen mainScreen].bounds.size.height/667.0
#define ScrenScaleWidth [UIScreen mainScreen].bounds.size.width/375.0
@implementation NSLayoutConstraint (layoutSize)
+ (void)load {
Method imp = class_getInstanceMethod([self class], @selector(initWithCoder:));
Method myImp = class_getInstanceMethod([self class], @selector(myInitWithCoder:));
method_exchangeImplementations(imp, myImp);
}
- (id)myInitWithCoder:(NSCoder*)aDecode {
[self myInitWithCoder:aDecode];
if (self) {
// //代码创建的时候 还不能拿到之后设置的tag 所以无法判断忽略项
// NSArray *ignoreTags = [UIView getIgnoreTags];
// for (NSNumber *num in ignoreTags) {
// if(self.tag == num.integerValue) return self;
// }
// if ([UIScreen mainScreen]) {
// <#statements#>
// }
CGFloat scale = ScrenScaleHeight;
switch (self.firstAttribute) {
case NSLayoutAttributeLeftMargin:
case NSLayoutAttributeRightMargin:
case NSLayoutAttributeTrailing:
case NSLayoutAttributeLeading:
scale = ScrenScaleWidth;
break;
default:
break;
}

    self.constant = self.constant * scale;
    if (self.identifier != nil) {
        BMLog(@"带有标记的约束identify-%@--%@",self.identifier,self);
    }
}
return self;
}        

附上这些demo文件吧github上地址,里面包含了各种适配的类型

全都是泡沫---邓紫棋
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 210,978评论 6 490
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 89,954评论 2 384
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 156,623评论 0 345
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 56,324评论 1 282
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 65,390评论 5 384
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 49,741评论 1 289
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,892评论 3 405
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 37,655评论 0 266
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 44,104评论 1 303
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 36,451评论 2 325
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 38,569评论 1 340
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 34,254评论 4 328
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,834评论 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,725评论 0 21
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,950评论 1 264
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 46,260评论 2 360
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 43,446评论 2 348

推荐阅读更多精彩内容