AutoLayout的使用及介绍

为什么会出现AutoresizingMask和AutoLayout?


1. 适配:适应、兼容各种不同的情况 
 
系统适配:新的方法、旧的方法废弃
 
屏幕适配:针对不同大小屏幕尺寸进行适配


1> 点、像素的关系


在用户眼中


屏幕是由无数个像素组成的


像素越多,屏幕越清晰


在开发者眼中


屏幕是由无数个点组成的,点又是由像素组成的


像素越多,屏幕越清晰


2> 在以前的iOS程序中,是如何布局UI界面的?


写固定值-> autoresizingMask -> autolayout-> sizeClasses


iPhone1-iPhone4s时代 屏幕的尺寸固定为(320,480) ,我们只需要简单计算一下相对位置就好了


iphone5-iphone5s时代屏幕的尺寸变了(320,568) 这时AutoresizingMask派上了用场 


iphone6时代(ios8) 屏幕的宽度也发生了变化,终于是时候抛弃AutoresizingMask改用Autolayout了,原因如下:

(1)不用支持ios5了 

(2)相对于屏幕适配的多样性来说autoresizingMask也已经过时了,直到iphone6发布之后Autolayout势在必行了




2.AutoresizingMask(简单了解)

AutoLayout不兼容


3.AutoLayout




1> 认识AutoLayout:

(1) Autolayout是一种“自动布局”技术,专门用来布局UI界面的

(2) Autolayout自iOS 6开始引入,由于Xcode 4的不给力,当时并没有得到很大推广~

(3) 自iOS 7(Xcode 5)开始,Autolayout的开发效率得到很大的提升

(4) 苹果官方也推荐开发者尽量使用Autolayout来布局UI界面

(5) Autolayout能很轻松地解决屏幕适配的问题

2> 代码实现Autolayout的步骤

1.利用NSLayoutConstraint类创建具体的约束对象,添加约束对象到相应的view上,一个NSLayoutConstraint对象就代表一个约束


    遵循公式:item1.attribute1 = multiplier × item2.attribute2 + constant


创建约束对象的常用方法

+(id)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 relatedBy:(NSLayoutRelation)relation toItem:(id)view2 attribute:(NSLayoutAttribute)attr2 multiplier:(CGFloat)multiplier constant:(CGFloat)c;

view1 :要约束的控件
attr1 :约束的类型(做怎样的约束)
relation :与参照控件之间的关系
view2 :参照的控件
attr2 :约束的类型(做怎样的约束)
multiplier :乘数
c :常量


2.添加约束到对应的父视图上


- (void)addConstraint:(NSLayoutConstraint *)constraint;

- (void)addConstraints:(NSArray *)constraints;


代码实现Autolayout的注意点

(1) 要先禁止autoresizing功能,设置view的下面属性为NO

    view.translatesAutoresizingMaskIntoConstraints = NO;

(2) 添加约束之前,一定要保证相关控件都已经在各自的父控件上,不用再给view设置frame


(3) 在autolayout中有这样的规定,对于两个同层级view之间的约束关系,添加到它们的父view上;对于两个不同层级view之间的约束关系,添加到他们最近的共同父view上;对于有层次关系的两个view之间的约束关系,添加到层次较高的父view上


3.基于Autolayout的动画


在修改了约束之后,只要执行下面代码,就能做动画效果


[UIView animateWithDuration:1.0 animations:^{
    [添加了约束的view的父控件 layoutIfNeeded];
}];





3> VFL(Visual Format Language:可视化格式语言)


  (1) VFL是苹果公司为了简化Autolayout的编码而推出的抽象语言


  (2) 示例:"H:[view1(72)]-12-[view2(50)]"    ->  view1宽72,view2宽50,它们之间间距12


  (3) 代码实现:

    使用VFL来创建约束数组

+ (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views;

format :VFL语句
opts :约束类型
metrics :VFL语句中用到的具体数值
views :VFL语句中用到的控件
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值