• 关于适配的一点考虑


      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文件内定义比例宏,以当前适配的模拟器型号为基准,计算出当前控件坐标属性在当前模拟器尺寸中的比例,用以在其他型号尺寸中计算出具体

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

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

  • 相关阅读:
    理解JavaScript的数值型数据类型
    The First Article
    DOS符号转义(转 http://www.robvanderwoude.com/escapechars.php)
    symfony中doctrine常用属性
    Node中的promise简说及入门
    DOM操作三
    DOM操作二
    DOM操作一
    JavaScript算法题(二) && 数组filter使用
    简说 call() 、apply() 、bind()
  • 原文地址:https://www.cnblogs.com/huketianxia/p/5165553.html
Copyright © 2020-2023  润新知