关于适配的一点考虑

  iOS适配,其实方法有很多,这个东西几乎人人都要用到,今天总结一下各自特点吧

  1.Autoresize

  在iOS6以前,用的是Autoresize,这是UIView的一个属性,UIView需要设定初始硬坐标,然后通过

  ive.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleBottomMargin;

  方法来设置(意思是调整宽度,两边不变|调整底部距离,顶部距离不变。对比对象都是其父视图),这个东西是一个枚举类型,直接设置返回的类型就可以了。不过现

  在来说Autoresize这个东西并不常用了,太过简单,iOS6以后已经改为默认适配用Autolayout , 而Autoresize则设置为默认关闭。

  即ive.translatesAutoresizingMaskIntoConstraints = NO;

  

  2.Autolayout

  针对于Autolayout来说,大部分是用于Storyboard或者Xib,多用于企业自主开发,外包少用。这个实际上就是添加约束线,保证上下左右或者宽高等不变而已,对于

  控件少的部位来说并不复杂。反而是比较易于掌握的。要注意的Autolayout可能会使UIScrollView在滚动的时候出现问题,例如限制scrollView的上下,左右滚动失

  灵等。有更新更新,清除约束等方便调整。还需要注意一点,在给多个对象添加约束时必须有一个带有固定值。

  3.VisualFormatLanguage

  这个语言简称VFL语言,也是代码约束中的一种,实际上就是用代码来给视图中的控件添加约束线,而添加对象也是在父视图。需要注意的一点是每个控件都需要添加

  水平和纵向两种约束才可以。例如:

  UIView *ive1=[UIView new];

  iv e1.translatesAutoresizingMaskIntoConstraints = NO;//使用VFL语言的时候需要手动关闭Autoresize适配,否则会出现视图缺失问题 

  ive1.backgroundColor=[UIColor redColor];

  [self.view addSubview:ive1];

  UIView *ive2=[UIView new];

  ive2.translatesAutoresizingMaskIntoConstraints=NO;

  ive2.backgroundColor=[UIColor blueColor];

   [self.view addSubview:ive2];

    //添加水平方向约束

    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[ive1]-10-[ive2(==ive1)]-10-|"

                                                                      options:NSLayoutFormatAlignAllTop|NSLayoutFormatAlignAllBottom

                                                                      metrics:nil

                                                                      views:NSDictionaryOfVariableBindings(ive1,ive2)]];

    /**

      *options:对齐方式,写水平约束H时设置垂直方向的对齐关系,例如top和bottom;同样写垂直约束V时设置水平对齐方式。

      *metrics:这里返回的是一个字典,意思是将约束中的某些值用字符串来代替,字典中给多对应的字符串数值赋值(CGFloat),方便修改

      *views  :这里返回的是一个字典,意思是将某些view用字符串来代替,字典中给多对应的字符串赋值,方便修改。也可以写成上边这种形式

      *format里如果使用了多个view,那么就可以用NSDictionaryOfVariableBindings(ive1,ive2)传递进去,这里边需要跟参数format中的一一对应,缺一不可。

     

     

      *Layout:布局,排版

      *Format:格式

      *align:匹配,排成一行

      *Direction:趋势,方向

      *Leading:领导的,主要的

      *Trailing:尾随的意思

      */

    

    //添加垂直方向约束

    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[ive1(50)]-10-|"

                                                                      options:NSLayoutFormatDirectionLeadingToTrailing

                                                                      metrics:nil

                                                                      views:NSDictionaryOfVariableBindings(ive1)]];

  3.Masonry

  这是一个三方适配工具,其原理类似又不同于VFL,用法更为灵活,给单个控件添加约束。传递使用block居多。需要注意的是约束必须在控件添加到视图内以后才可以

  添加。其主要约束有距边距,宽高,等宽高,当多个属性相同时可以用点语法连写。例如:

  UIView *redView=[[UIView alloc]init];

  redView.translatesAutoresizingMaskIntoConstraints = NO;

  redView.shouldGroupAccessibilityChildren=YES;

  redView.backgroundColor = [UIColor redColor];

  [self.view addSubview:redView];

  [redView mas_makeConstraints:^(MASConstraintMaker *make) {

  make.center.equalTo(self.view);

  make.size.mas_equalTo(CGSizeMake(300, 300));

    }];

  masonry的用法很多,很灵活,但是也有他的缺点,他的约束关系建立在两个固定控件之上,而非与主视图之间。所以当约束建立完成以后,第一个控件坐标发生变

  化,那么后面以他为基准建立的坐标体系将会整体变化,以此类推。如果界面控件较多,那么当调节其中某个控件的某一坐标属性时,整体都要清晰的整理一遍。

  4.SDAutolayout

  这个适配工具出现在15年底,我用的并不多。作用原理类似Masonry,多了Ratio比例属性,距边距以针对的某个控件为基础去设置。与Masonry的不同的是,SD

  在封装原理上用点语法来将各部分属性串联起来,没有用block。

  

  5.等比例适配,在pch文件内定义比例宏,以当前适配的模拟器型号为基准,计算出当前控件坐标属性在当前模拟器尺寸中的比例,用以在其他型号尺寸中计算出具体

  数值,从而达到比例相等的适配原理。

  上边这些内容只是简单的总结了一下目前的认识,有许多不足与错误需要日后看到及时修改。

原文地址:https://www.cnblogs.com/huketianxia/p/5165553.html