iOS XIB和StoryBoard的屏幕适配

XIB和StoryBoard一直都是iOS开发布局中的一个重点,大家也很喜欢使用它快速的勾勒出好看的图形界面。我们在使用中,同时也伴随着一个问题,不同型号的手机屏幕宽度高度都不一样,我们在设置约束的时候都是固定的数值,这样就会造成屏幕上显示的效果大不相同。为了能在不同尺寸的手机上显示出相似的效果。对约束进行动态计算,然后得到对应比例的尺寸。
NSLayoutConstraint的分类
我们通过对NSLayoutConstraint添加分类属性,让我们能动态的计算约束的结果
我们定义一个可视化属性,所以我们需要使用IBInspectable来修饰这个属性。

@interface NSLayoutConstraint (IBAdapter)
@property (nonatomic, assign) IBInspectable BOOL adapterScreen;
@end

因为分类添加的属性需要通过关联对象的技术才能实现get和set。同时.m文件需要导入runtime.h.
先定义两个宏,用来计算适配之后的约束尺寸

define BaseWidth 375

define AdaptW [[UIScreen mainScreen] bounds].size.width / BaseWidth * 1.00

实现set方法

 static char *adapterKey = "adapterKey";

  -(void)setAdapterScreen:(BOOL)adapterScreen{
      BOOL flag = adapterScreen;
      objc_setAssociatedObject(self, adapterKey, @(flag), OBJC_ASSOCIATION_RETAIN_NONATOMIC);
      if(adapterScreen){
          self.constant = AdaptW * (self.constant);
      }
  }

实现get方法

-(BOOL)adapterScreen{
   BOOL flag = objc_getAssociatedObject(self, adapterKey);
    return flag;
}

好了,整体的编码工作就结束了,编译一下项目,你就会发现,你的约束上面多了一个adapterScreen视图属性。选择on,那我们的这个属性就做好了适配。

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。