初识 AutoLayout

一、使用"公式":

1、frame: 原点以及自身的位置来确定自身的位置

2、autoLayout: 根据参照视图的位置  来定义自己的位置

3、autoLayout: 相对布局  约束视图和视图之间的关系 来分配 屏幕上的位置

4、使用VFL(Visual Format Language 视觉格式化语言)通过添加字符,来约束视图和视图之间的关系

5、使用autoLayout 必须把 translatesAutoresizingMaskIntoConstraints禁用才可以使用相对布局是找一个参照物 拿参照物当做基础,设置他和参照物的相对距离 来设置自己的位置

6、FVL 需有 横 竖 两个方向的约束  ( 1、“H:”(横向),

2、“V:”(竖向),

3、“|” (表示它的父视图),

4、“-50-”(表示两个视图之间的间距),

5、“[textField]”)

7、H:横向

| 表示他的父视图

-50- 表示后面视图 与前面视图的距离 (后面视图是textField,前面视图是他的父视图)

[textField(>=200)] 要约束视图的宽  (>=200)允许最小的宽度是200  如果是竖向  就是允许最小的高度

@"H:|-50-[textField(>=200)]-50-|"

距离坐边原点距离50   右边边界距离50    允许视图的最小宽度是200

8、使用 autoLayout 适配的时候 以最小尺寸设备 为基准

二、使用示例:

  1 #import "ViewController.h"
  2
  3 @interface ViewController ()
  4
  5 @end
  6
  7 @implementation ViewController
  8
  9 - (void)viewDidLoad {
 10     [super viewDidLoad];
 11     [self demo3];
 12
 13 }
 14
 15 // 一个视图
 16 - (void)demo1 {
 17     UIView *view = [[UIView alloc] init];
 18 //    如果使用autoLayout 那么 禁止使用 translatesAutoresizingMaskIntoConstraints 属性
 19
 20     view.translatesAutoresizingMaskIntoConstraints = NO;
 21     view.backgroundColor = [UIColor redColor];
 22     [self.view addSubview:view];
 23
 24
 25 //    VFL 横向 竖向布局
 26 //    @"H:" 设置横向布局
 27 //    @"H:|-20-"设置横向布局 距离父视图的左侧边距
 28 //    @"H:|-20-[view(>=200)]" 设置横向布局 距离父视图的左侧边距, 设置view横向的 尺寸不能小于200
 29 //    @"H:|-20-[view(>=200)]-20-|" 设置横向布局 距离父视图的左侧边距, 设置view横向的 尺寸不能小于200  设置右侧与父视图之间的间距
 30
 31
 32 //    @"V:|-40-[view(>=200)]-20-|"设置竖向布局 距离顶部边距40,设置view的尺寸不能小于400,设置底部与父视图之间的边距为20
 33 //    使用VFL 需要把视图的对象(视图)与 他的名字(字符串)绑定起来
 34     NSDictionary *views = NSDictionaryOfVariableBindings(view);
 35 //    给 self.view 和 view 添加约束
 36 //    addConstraints 添加约束的 方法
 37 //    NSLayoutConstraint 添加具体约束的一个类
 38
 39 //    + (NSArray *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(NSDictionary *)metrics views:(NSDictionary *)views;
 40 //    format VFL;
 41 //    opts 同意按照某个方向去布局;
 42 //    metrics 绑定的参数;
 43 //    views 绑定的视图参数
 44     [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[view(>=200)]-20-|" options:0 metrics:nil views:views]];
 45     [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-40-[view(>=200)]-20-|" options:0 metrics:nil views:views]];
 46
 47 }
 48
 49
 50 - (void)demo2 {
 51     UIView *view = [[UIView alloc] init];
 52     //    如果使用autoLayout 那么 禁止使用 translatesAutoresizingMaskIntoConstraints 属性
 53
 54     view.translatesAutoresizingMaskIntoConstraints = NO;
 55     view.backgroundColor = [UIColor redColor];
 56     [self.view addSubview:view];
 57
 58
 59     UIView *view1 = [[UIView alloc] init];
 60     //    如果使用autoLayout 那么 禁止使用 translatesAutoresizingMaskIntoConstraints 属性
 61
 62     view1.translatesAutoresizingMaskIntoConstraints = NO;
 63     view1.backgroundColor = [UIColor brownColor];
 64     [self.view addSubview:view1];
 65
 66
 67     NSDictionary *views = NSDictionaryOfVariableBindings(view,view1);
 68 //    红色view 的横向约束
 69     [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[view(>=200)]-20-|" options:0 metrics:nil views:views]];
 70 //    红色view 的竖向约束
 71     [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-40-[view(50)]-10-[view1]" options:0 metrics:nil views:views]];
 72
 73 //    棕色view1 的横向约束
 74     [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[view1(>=200)]-20-|" options:0 metrics:nil views:views]];
 75 //    棕色view1 的竖向约束
 76     [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[view]-10-[view1(50)]" options:0 metrics:nil views:views]];
 77
 78
 79         UIView *view2 = [[UIView alloc] init];
 80     view2.translatesAutoresizingMaskIntoConstraints = NO;
 81     view2.backgroundColor = [UIColor greenColor];
 82     [self.view addSubview:view2];
 83 //    view2 横向
 84 //    view2 竖向
 85 }
 86
 87 //  优化 demo2
 88 - (void)demo3 {
 89     UIView *view = [[UIView alloc] init];
 90     //    如果使用autoLayout 那么 禁止使用 translatesAutoresizingMaskIntoConstraints 属性
 91
 92     view.translatesAutoresizingMaskIntoConstraints = NO;
 93     view.backgroundColor = [UIColor redColor];
 94     [self.view addSubview:view];
 95
 96
 97     UIView *view1 = [[UIView alloc] init];
 98     //    如果使用autoLayout 那么 禁止使用 translatesAutoresizingMaskIntoConstraints 属性
 99
100     view1.translatesAutoresizingMaskIntoConstraints = NO;
101     view1.backgroundColor = [UIColor brownColor];
102     [self.view addSubview:view1];
103
104
105     NSDictionary *views = NSDictionaryOfVariableBindings(view,view1);
106     //    红色view 的横向约束
107     [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[view(>=200)]-20-|" options:0 metrics:nil views:views]];
108     //    红色view 棕色view1 的竖向约束
109 //    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-40-[view(50)]-10-[view1(50)]" options:0 metrics:nil views:views]];
110
111 //  红色view 棕色view1 两个视图的高度 都是50
112 //    [view1(view)];
113     [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-40-[view(50)]-10-[view1(view)]" options:0 metrics:nil views:views]];
114
115     //    棕色view1 的横向约束
116     [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-20-[view1(>=200)]-20-|" options:0 metrics:nil views:views]];
117
118 //    //    棕色view1 的竖向约束
119 //    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:[view]-10-[view1(50)]" options:0 metrics:nil views:views]];
120
121
122 }

三、模拟器运行效果图

demo1 运行效果:

demo2 运行效果:

demo3 运行效果:

时间: 2024-10-31 02:08:44

初识 AutoLayout的相关文章

iOS AutoLayout自动布局中级开发教程(2)-初识autolayout

通过storyboard,我们初识一下autolayout的表现形式: 看下图,使用storyboard创建的两个控件视图: 上图中的四个圆角框内的距离值,就是约束; 比如上图的第二个视图,他的 约束是:  距离 view左边,右边界的距离,这样就确定了 宽度和水平方向上的位置,还有距离上面(第一个)视图的距离,还有高,这样就确定了 视图的高度和y轴的位置;这样就可以在一个二维空间(屏幕)中唯一的确定这个视图的位置了; 但是,需要注意的,在添加距离上一个视图下边界的约束时,第一个视图的位置一定要

iOS界面布局之三——纯代码的autoLayout及布局动画

iOS界面布局之三--纯代码的autoLayout及布局动画 一.引言 关于界面布局,apple的策略已经趋于成熟,autolayout的优势在开发中也已经展现的淋漓尽致.除了使用storyBoard进行布局约束的拖拽,有时我们也需要在代码中进行autolayout的布局设置,Masonry库可以方便的创建约束属性,实际上,我们也没有必要再使用系统原生的代码来创建和设置约束,这篇博客只作为使用的方法备忘.前几篇布局介绍的链接如下: 使用autoresizing进行界面布局:http://my.o

初识Python,望君多多关照

在学习Python之前,我们接触过数据结构和网页制作.前者让我们学习如何把C语言运用的更加整齐规范,而后者让我们亲身学习如何运用所学,制作一个静态网页.通过这些课程的学习,让我对C语言产生了比较大的压力,以至于对编程.对这学期的Python课程都有一种如临大敌的感觉. 但是真的学习了这门课程,体会了编码过程中的一些固定运用方法和套路之后,也许过程中对这门课程隐隐约约产生了一点点朦胧的感觉,仿佛他也并没有想象中的那么困难,起码现在的学习让我认为,他可能没有C语言那么繁琐和麻烦.当然,以一个初学者的

如何解决IOS 动画中 Autolayout 与View Transforms的冲突

IOS 的动画放大与缩小,并非按照找它的中心点放大和缩小,而是左上角 .我分析了下原来是Autolayout 与View Transforms的冲突造成的. - (void) addSubviewWithZoomInAnimation:(UIView*)view duration:(float)secs option:(UIViewAnimationOptions)option { // first reduce the view to 1/100th of its original dimen

初识数组排序!!!!

<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>初识数组排序</title> <!--调试成功--> <style type="text/css"> *{ padding:0; margin: 0; } li,ul{ list-style: none; } #p

初识操作系统和linux

初识操作系统和linux 1.计算机系统由硬件系统和软件系统两大部分组成:是一种能接收和存储信息,并按照存储在其内部的程序对海量数据进行自动.高速地处理,然后把处理结果输出的现代化智能电子设备. 2.世界上第一台计算机是1946年诞生在美国宾州大学. 3.冯·诺依曼体系结构:1946年数学家冯·诺依曼于提出计算机硬件系统由运算器.控制器.存储器.输入设备.输出设备.摩根定律:当价格不变时,集成电路上可容纳的元器件的数目,约每隔18-24个月便会增加一倍,性能也将提升一倍.现在计算机技术进本很难遵

JAVA 初识类加载机制 第13节

JAVA 初识类加载机制 第13节 从这章开始,我们就进入虚拟机类加载机制的学习了.那么什么是类加载呢?当我们写完一个Java类的时候,并不是直接就可以运行的,它还要编译成.class文件,再由虚拟机解释给当前的操作系统去执行.这些过程都是我们看不见的,我们能看见的也就是一个.class文件.既然虚拟机要解释这些.class文件给当前的操作系统听,那么他怎么获得这些.class文件呢?虚拟机获得这些.class文件的过程就是类加载了. 所以,总结来说就是:虚拟机将.class文件从磁盘或者其他地

AutoLayout

1. iOS两种自适应布局方式: -AutoLayout(自动布局) + SizeClasses(尺寸类别) -Autoresizing (自动调整尺寸/弹簧式调整尺寸) 前者 AutoLayout 是从iOS6出现,通过创建视图约束实现自适应,SizeClasses是iOS8 开始出现,用于配合AutoLayout使用,为解决所有(包括iPhone,iPad)iOS设备屏幕尺寸和屏幕旋转时UI的适配. 后者是早期开发使用的适配界面的方式,现在仍然保留.通过弹簧式调整控件尺寸,使其适应屏幕的尺寸

iOS 8 自动布局sizeclass和autolayout的基本使用

1.首先创建新的工程,设置rootviewcontroller(这里不再多说) 2.勾选下面(因为我们到下面是使用sizeClass,所以勾选两个): 3.这里我创建了一个lable,名称为View1,在这里可以看到设置View1的约束为距上和左侧为0,宽和高设置的都是200,同理可以设置距离右和下的约束,如图: 4.当上面工作完成以后,点击Add按钮,会出现黄色的约束范围,如下图: 5.上面工作完成后点击Update Frames,到此View1的约束创建完毕,如图.当我们要更改约束的时候,需