iOS:xib文字、屏幕等比缩放适配

ScaleWithScreen

iOS:xib屏幕适配

经过在网上找到许多方法集中处理,终于可以进行XIB屏幕适配了 , 一下是参考各位大佬的网页链接。 

一、参考 小生不怕 的屏幕缩放适配

第二种:利用IBInspectable关键字和分类

   后来我到了新公司接手了个旧项目,工程里几乎所有的界面都是用xib来写的。惨了,UI设计师同事还跟我说,新写的界面都要等比例缩放,不然就要各种大小不一的屏幕对一下,我累她也累。    就是因为这种适配的问题,我两年前开始放弃了可视化的布局界面方式,改用纯代码。这次我想保持项目风格的统一,而且也想再次拥抱storyboard和xib,通过查找资料找到利用IBInspectable关键字和分类来实现等比例缩放的功能 ( IBInspectable 就是能够让你的自定义 UIView 的属性出现在 IB 中 Attributes inspector)。具体做法就是:

1.写一个NSLayoutConstraint的分类 

2.添加adapterScreen的属性(Bool 值,yes代表需要对屏幕进行等比例适配)

    #import <UIKit/UIKit.h>

    @interface NSLayoutConstraint (BSIBDesignable)

    @property(nonatomic, assign) IBInspectable BOOL adapterScreen;

    @end


3.在adapterScreen的set方法里面对NSLayoutConstraint对象的constant值进行换算

#import "NSLayoutConstraint+BSIBDesignable.h" 

#import <objc/runtime.h> 

// 基准屏幕宽度 #define kRefereWidth 375.0 // 以屏幕宽度为固定比例关系,来计算对应的值。假设:基准屏幕宽度375,floatV=10;当前屏幕宽度为750时,那么返回的值为20 #define AdaptW(floatValue) (floatValue*[[UIScreen mainScreen] bounds].size.width/kRefereWidth) 

@implementation NSLayoutConstraint (BSIBDesignable) 

//定义常量 必须是C语言字符串 

static char *AdapterScreenKey = "AdapterScreenKey"; 

- (BOOL)adapterScreen{ 

NSNumber *number = objc_getAssociatedObject(self, AdapterScreenKey);

 return number.boolValue; 

- (void)setAdapterScreen:(BOOL)adapterScreen {

 NSNumber *number = @(adapterScreen);

 objc_setAssociatedObject(self, AdapterScreenKey, number, OBJC_ASSOCIATION_RETAIN_NONATOMIC); 

if (adapterScreen){ 

self.constant = AdaptW(self.constant);

 } 

@end

作者:小生不怕 链接:https://www.jianshu.com/p/cf049bebdc6c 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处


因为这种方法出现了控件过多,一个一个去设置又过于麻烦,我就又百度了许多方法, 首先是 春暖花已开 简书地址 https://www.jianshu.com/u/602f43080ed0

模仿他的代码,使用 method_exchangeImplementations 方法交换 触发self.adapterScreen = YES;

#import "NSLayoutConstraint+MZExtension.h"

#import <objc/runtime.h>

@implementation NSLayoutConstraint (MZExtension)

-(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) { 

if (![self.identifier isEqualToString:@"333"]) { 

self.adapterScreen = YES;//触发self.adapterScreen = YES

      }

  }

 return self; 

}

最后进行字体和圆角适配 来自于 赵哥窟 以下是简书地址


很多时候我们会使用Xib开发界面,如果是Xib创建的,我们再去每个控件都重新都设置一遍字体,岂不是无端增加工作量,最好的办法是在XIB里面设置字体大小后自动进行等比缩放。

我的思路是这样的,通过Xib创建的视图在初始化的时候都会调用awakeFromNib方法,通过交换方法,实现为Xib适配字体。

```

+(CGFloat)getScaleFontSize{

// 375 是设计师一般都习惯以iphone6设计UICGFloat width=[[UIScreen mainScreen]currentMode].size.width;

// 1242是iPhone XS Max的宽度,如果不加限制在iPad字体惨不忍睹,大于iPhone XS Max 的都适配1.5倍

if(width<=1242){

return[UIScreen mainScreen].bounds.size.width/375;

}else{

return1.5;

}

}

```

作者:赵哥窟 链接:https://www.jianshu.com/p/b54b0a47f021 来源:简书 著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

以下是合并DEMO地址:

https://github.com/HEROhuqinchao/ScaleWithScreen

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