1 #import "ViewController.h"
2
3 @interface ViewController ()
4
5 @end
6
7 @implementation ViewController
8
9 - (void)viewDidLoad {
10 [super viewDidLoad];
11
12 [self fun5];
13
14 }
15
16 -(void)fun1{
17 //注意使用VFL,不用设置视图的frame
18 UIView *view = [[UIView alloc] init];
19 view.backgroundColor = [UIColor brownColor];
20 [self.view addSubview:view];
21
22 view.translatesAutoresizingMaskIntoConstraints = NO;//注意,要想使约束条件起作用,必须将此属性设置为no
23
24 /*
25 VFL相关的标识符
26 H:代表水平方向
27 V:代表垂直方向
28 |代表父视图
29 - 代表距离 例(H:|-20-)表示距离父视图左侧20像素
30 []代表子视图相关属性
31 */
32
33 //对子视图View进行约束设置,format表示要设置的约束语句,在本句中意思为:view距离父视图左侧30像素,距离父视图右侧20像素(如果没设置具体的数字,且写了-)
34 //options代表对其方式,默认写0就行
35 //metrics 这里是一个字典,当在format中使用了动态数据比如上现这句:@"H:|-[button(==width)]-|",表示这个button的宽度为width,那么这个参数去哪里找呢?就是在这个字典里面找到key对就的值,如果没有找到这个值,app会crash
36 //views 代表约束条件中所涉及的所有视图(父视图除外)
37 NSArray *arr = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-30-[view]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)];
38
39 NSArray *arr1 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[view]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)];
40
41 [self.view addConstraints:arr];
42 [self.view addConstraints:arr1];
43
44 }
45
46 -(void)fun2{
47 UIView *view = [[UIView alloc] init];
48 view.backgroundColor = [UIColor grayColor];
49 [self.view addSubview:view];
50
51 view.translatesAutoresizingMaskIntoConstraints = NO;
52 //[view(>=200)] 表示给view设置尺寸,此时小括号里的关系运算符只能是 == <= >=,注意,改尺寸的值不要与约束冲突,==:约束可以不写,简写成H:[view(==200)] >=:当左右距离只设置了一个或者都未设置,视图的尺寸为最小值,如果两个都设置时,view 的尺寸为屏幕宽度减去左右距离,此时要保证减后的值>=尺寸最小值
53
54 NSArray *arr = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[view(>=200)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)];
55
56 NSArray *arr1 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[view(==100)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)];
57 [self.view addConstraints:arr1];
58 [self.view addConstraints:arr];
59
60 }
61
62 -(void)fun3{
63 UIView *view = [[UIView alloc] init];
64 view.backgroundColor = [UIColor grayColor];
65 [self.view addSubview:view];
66
67 view.translatesAutoresizingMaskIntoConstraints = NO;
68
69 CGFloat width = 200;
70
71 //当我们在设置约束条件时,距离父视图上下左右的像素值以及view的尺寸不是固定的数字(用某个字符串代替),这时我们需要给metrics设置一个字典,该字典的key必须是约束语句中使用的字符串,对应的value可以自行设置
72 NSArray *arr = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-left-[view(==width)]" options:0 metrics:@{@"width":[NSNumber numberWithFloat:width],@"left":@30} views:NSDictionaryOfVariableBindings(view)];
73
74 NSArray *arr1 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[view(==100)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)];
75 [self.view addConstraints:arr1];
76 [self.view addConstraints:arr];
77
78 }
79
80 -(void)fun4{
81 UIView *view = [[UIView alloc] init];
82 view.backgroundColor = [UIColor grayColor];
83 [self.view addSubview:view];
84
85 view.translatesAutoresizingMaskIntoConstraints = NO;
86
87 CGFloat width = 200;
88
89 //当我们在设置约束条件时,距离父视图上下左右的像素值以及view的尺寸不是固定的数字(用某个字符串代替),这时我们需要给metrics设置一个字典,该字典的key必须是约束语句中使用的字符串,对应的value可以自行设置
90 NSArray *arr = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-left-[view(==width)]" options:0 metrics:@{@"width":[NSNumber numberWithFloat:width],@"left":@30} views:NSDictionaryOfVariableBindings(view)];
91
92 NSArray *arr1 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[view(==100)]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view)];
93 [self.view addConstraints:arr1];
94 [self.view addConstraints:arr];
95
96
97 UIView *view1 = [[UIView alloc] init];
98 view1.backgroundColor = [UIColor purpleColor];
99 [self.view addSubview:view1];
100
101 view1.translatesAutoresizingMaskIntoConstraints = NO;
102
103 //[view1(view)] 代表view1和view某个方向尺寸相同
104 NSArray *arr2 = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[view1(view)]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view1,view)];
105
106 //V:[view]-[view1]-20-|:子视图view1垂直方向距离平级子视图view 8像素(默认)
107 NSArray *arr3 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:[view]-[view1]-20-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(view,view1)];
108 [self.view addConstraints:arr2];
109 [self.view addConstraints:arr3];
110
111
112 }
113
114 //用VFL实现label自适应
115 -(void)fun5{
116 UILabel *label = [[UILabel alloc] init];
117 label.backgroundColor = [UIColor grayColor];
118 label.numberOfLines = 0;
119 label.lineBreakMode = NSLineBreakByCharWrapping;
120 label.text = @"hiwehfdiuwehdiowqhdoiwehjdoiuwehdiouwhediuwheioudhewiuodhwehoihiuhiuhiuhiluhiuhiuhiuhihuhuuhhuh";
121 [self.view addSubview:label];
122 label.translatesAutoresizingMaskIntoConstraints = NO;
123
124 NSArray *arr = [NSLayoutConstraint constraintsWithVisualFormat:@"H:|-[label]-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(label)];
125
126 NSArray *arr1 = [NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[label]" options:0 metrics:nil views:NSDictionaryOfVariableBindings(label)];
127
128 [self.view addConstraints:arr];
129 [self.view addConstraints:arr1];
130 }
131
132 - (void)didReceiveMemoryWarning {
133 [super didReceiveMemoryWarning];
134 // Dispose of any resources that can be recreated.
135 }
136
137 @end