最近正在研究Auto Layout 记录下心得和大家分享下!效果图如下 很简单的效果!只适合新手级别的看
1.初始化三个需要的控件 需要注意的是 translatesAutoresizingMaskIntoConstraints 这个属性.用来禁止AutoresizingMask转换成AutoLayout,简单来说,Autoresizing和AutoLayout用的不是一套东西,但是默认情况下是相互转换的,这里我们要指定使用AutoLayout系统,所以要禁止自动转换
UIView *cyanView = [[UIView alloc]init]; cyanView.backgroundColor = [UIColor cyanColor]; // 防止Autoresizing和AutoLayout的相互转化 cyanView.translatesAutoresizingMaskIntoConstraints = NO; [self.view addSubview:cyanView]; UIView *redView = [[UIView alloc]init]; redView.backgroundColor = [UIColor redColor]; redView.translatesAutoresizingMaskIntoConstraints = NO; [self.view addSubview:redView]; UIView *blueView = [[UIView alloc]init]; blueView.backgroundColor = [UIColor blueColor]; blueView.translatesAutoresizingMaskIntoConstraints = NO; [self.view addSubview:blueView];
分析下,大概需要添加是个限制,两行两列。 个人感觉VFL语言比较容易上手,因为看起来比较形象。H,V分别代表水平和竖直方向。“|” 可以代表上下左右四个边界 数字就代表表距离.
// 定义一个数组 来接收所需要的一些限制 NSMutableArray *array = [NSMutableArray array]; NSDictionary *dic = NSDictionaryOfVariableBindings(self.view ,cyanView,blueView,redView); // 水平方向第一行的限制 [array addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[cyanView(==redView)]-10-[redView]-10-|" options:0 metrics:nil views:dic]]; // 水平方向第二行 blueView距离左右各20 [array addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[blueView]-10-|" options:0 metrics:nil views:dic]]; // 第一列 [array addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-30-[cyanView(>=50,<=100)]-10-[blueView(>=100)]-10-|" options:0 metrics:nil views:dic]]; // 第二列 [array addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-30-[redView]-10-[blueView(>=100)]-10-|" options:0 metrics:nil views:dic]];
最后只需要把限制添加到父视图就OK了。
[self.view addConstraints:array];
个人的一些总结,新手可能碰到的一些问题。
1. 对于常碰见的一些crash,有的是因为添加的限制过多造成的冲突,有的是因为太少而导致的约束不足。
2.在VFL语句中用self会出现警告,可换成下划线。
当然也可以使用UIView+AutoLayout框架来实现,有时间在分享给大家!
时间: 2024-10-28 13:46:37