您的位置:首页 > 其它

关于适配的一点考虑

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

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

  上边这些内容只是简单的总结了一下目前的认识,有许多不足与错误需要日后看到及时修改。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: