iOS - NSLayoutConstraint


1

2

3

4

5

6

7

[NSLayoutConstraint constraintWithItem:(id)item

attribute:(NSLayoutAttribute)attribute

relatedBy:(NSLayoutRelation)relation

toItem:(id)otherItem

attribute:(NSLayoutAttribute)otherAttribute

multiplier:(CGFloat)multiplier

constant:(CGFloat)constant]

参数说明:

第一个参数:指定约束左边的视图view1

第二个参数:指定view1的属性attr1,具体属性见文末。

第三个参数:指定左右两边的视图的关系relation,具体关系见文末。

第四个参数:指定约束右边的视图view2

第五个参数:指定view2的属性attr2,具体属性见文末。

第六个参数:指定一个与view2属性相乘的乘数multiplier

第七个参数:指定一个与view2属性相加的浮点数constant

这个函数的对照公式为:

view1.attr1 <relation> view2.attr2 * multiplier + constant

注意:

1.如果你想设置的约束里不需要第二个view,要将第四个参数设为nil,第五个参数设为NSLayoutAttributeNotAnAttribute

举例:


1

2

3

4

5

6

7

[NSLayoutConstraint constraintWithItem:view1

attribute:NSLayoutAttributeLeft

relatedBy:NSLayoutRelationEqual

toItem:view2

attribute:NSLayoutAttributeRight

multiplier:1

constant:10]

翻译过来就是:view1的左侧,在,view2的右侧,再多10个点,的地方。

附视图的属性和关系的值:


1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

typedef NS_ENUM(NSInteger, NSLayoutRelation) {

NSLayoutRelationLessThanOrEqual = -1,          //小于等于

NSLayoutRelationEqual = 0,                     //等于

NSLayoutRelationGreaterThanOrEqual = 1,        //大于等于

};

typedef NS_ENUM(NSInteger, NSLayoutAttribute) {

NSLayoutAttributeLeft = 1,                     //左侧

NSLayoutAttributeRight,                        //右侧

NSLayoutAttributeTop,                          //上方

NSLayoutAttributeBottom,                       //下方

NSLayoutAttributeLeading,                      //首部

NSLayoutAttributeTrailing,                     //尾部

NSLayoutAttributeWidth,                        //宽度

NSLayoutAttributeHeight,                       //高度

NSLayoutAttributeCenterX,                      //X轴中心

NSLayoutAttributeCenterY,                      //Y轴中心

NSLayoutAttributeBaseline,                     //文本底标线

NSLayoutAttributeNotAnAttribute = 0            //没有属性

};

NSLayoutAttributeLeft/NSLayoutAttributeRight 和NSLayoutAttributeLeading/NSLayoutAttributeTrailing的区别是left/right永远是指左右,而leading/trailing在某些从右至左习惯的地区会变成,leading是右边,trailing是左边。

示例代码:

 1 - (void)viewDidLoad {
 2     [super viewDidLoad];
 3
 4 //  创建控件
 5     UIView *blueView = [UIView new];
 6     blueView.backgroundColor = [UIColor blueColor];
 7     [self.view addSubview:blueView];
 8
 9     UIView *redView = [UIView new];
10     redView.backgroundColor = [UIColor redColor];
11     [self.view addSubview:redView];
12
13     /*
14      NSLayoutAttributeLeft = 1, 左边
15      NSLayoutAttributeRight,    右边
16      NSLayoutAttributeTop,      顶部
17      NSLayoutAttributeBottom,   底部
18      NSLayoutAttributeLeading,  左边
19      NSLayoutAttributeTrailing,  右边
20      NSLayoutAttributeWidth,     宽
21      NSLayoutAttributeHeight,    高
22      NSLayoutAttributeCenterX,   水平中线
23      NSLayoutAttributeCenterY,   竖直中线
24
25      */
26      /*
27       typedef NS_ENUM(NSInteger, NSLayoutRelation) {
28       NSLayoutRelationLessThanOrEqual = -1,
29       NSLayoutRelationEqual = 0,
30       NSLayoutRelationGreaterThanOrEqual = 1,
31       };
32       */
33 //  前提,给那个控件添加约束,就把那个控件的autoresing关闭
34     blueView.translatesAutoresizingMaskIntoConstraints = NO;
35     redView.translatesAutoresizingMaskIntoConstraints = NO;
36 //    self.view.translatesAutoresizingMaskIntoConstraints = NO;
37 /*
38   使用autolayout的两个前提:
39   1.一定要添加到控制器的view的层次结构中
40   2.关闭要添加约束的控件的autoresing
41      translatesAutoresizingMaskIntoConstraints
42  */
43
44
45
46 // blueView的顶部约束
47    NSLayoutConstraint *blueTop = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeTop multiplier:1 constant:20];
48     [self.view addConstraint:blueTop];
49
50     // blueView的左边约束
51     NSLayoutConstraint *blueLeft = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeLeft relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeLeft multiplier:1 constant:20];
52     [self.view addConstraint:blueLeft];
53
54
55     // blueView的右边约束
56     NSLayoutConstraint *blueRigth = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:self.view attribute:NSLayoutAttributeRight multiplier:1 constant:-20];
57     [self.view addConstraint:blueRigth];
58
59     // blueView的高度
60     NSLayoutConstraint *blueHeight = [NSLayoutConstraint constraintWithItem:blueView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:nil attribute:NSLayoutAttributeNotAnAttribute multiplier:1 constant:100];
61
62     [blueView addConstraint:blueHeight];
63
64
65     // redView的顶部约束
66     NSLayoutConstraint *redTop = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeTop relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeBottom multiplier:1 constant:20];
67     [self.view addConstraint:redTop];
68
69     // redView右对齐
70     NSLayoutConstraint *redRight = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeRight relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeRight multiplier:1 constant:0];
71     [self.view addConstraint:redRight];
72
73     // redView高
74     NSLayoutConstraint *redHeight = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeHeight relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeHeight multiplier:1 constant:0];
75     [self.view addConstraint:redHeight];
76
77     // redView宽
78     NSLayoutConstraint *redWidth = [NSLayoutConstraint constraintWithItem:redView attribute:NSLayoutAttributeWidth relatedBy:NSLayoutRelationEqual toItem:blueView attribute:NSLayoutAttributeWidth multiplier:0.5 constant:0];
79     [self.view addConstraint:redWidth];
80 }
81
82
83
84 @end
时间: 2024-11-29 06:15:55

iOS - NSLayoutConstraint的相关文章

Swift技术之如何在iOS 8下使用Swift设计一个自定义的输入法 (主要是NSLayoutConstraint 的使用)

当前位置: > Swift新手入门 > Swift技术之如何在iOS 8下使用Swift设计一个自定义的输入法 时间:2014-09-10 16:49来源:未知 作者:啊成 举报 点击:562次 我会复习一下有关键盘扩展的内容,然后通过使用iOS 8中的新应用扩展API的设计一个摩斯码的输入法.完成这个教程大约需要花费20分钟.完整代码 概览 通过使用自定义输入法替换系统输入法,用户可以实现一些特别的功能.例如一个特别新颖的输入方式,或输入iOS原生并不支持的语言.自定义输入法的基本功能很简单

iOS开发NSLayoutConstraint代码自动布局

1.NSLayoutConstraint简介 适配界面大多用Masonry工具,也是基于NSLayoutConstraint写的!通过使用两个类方法实现自动布局: + (NSArray<__kindof NSLayoutConstraint *> *)constraintsWithVisualFormat:(NSString *)format options:(NSLayoutFormatOptions)opts metrics:(nullable NSDictionary<NSStri

iOS中文API之NSLayoutconstraint

AutoLayout为开发者提供了一种不同于传统对于UI元素位置指定的布局方法.以前,不论是在IB里拖放,还是在代码中写,每个UIView都会有自己的frame属性,来定义其在当前视图中的位置和尺寸.使用AutoLayout的话,就变为了使用约束条件来定义view的位置和尺寸.这样的最大好处是一举解决了不同分辨率和屏幕尺寸下view的适配问题,另外也简化了旋转时view的位置的定义,原来在底部之上10像素居中的view,不论在旋转屏幕或是更换设备(iPad或者iPhone5或者以后可能出现的mi

iOS动态管理AutoLayout的约束NSLayoutConstraint

除了使用Storyboard之外,也可以使用使用代码的方式,动态的向指定的UIView,添加约束. 例如有两个UILabel:someLabel,otherLabel 首先用代码实例化,两个控件 self.someLabel = [[UILabel alloc]initWithFrame:CGRectZero]; self.someLabel.translatesAutoresizingMaskIntoConstraints = NO; [self.view addSubview:self.in

IOS页面自动布局 之 NSLayoutConstraint基础篇

使用AutoLayout之前需要知道以下两点: 1.必须设置 translatesAutoresizingMaskIntoConstraints为NO. 2.如果是viewControl则AutoLayout适配写在[- updateViewConstraints]中: 如果是view则AutoLayout适配写在[- updateConstraints]中. 一.要讲解的方法: 1 /* Create constraints explicitly. Constraints are of the

【iOS】屏幕适配之NSLayoutConstraint

前言 如何实现一张图片在iPhone和iPad上显示不同的尺寸,我了解到一般有三种办法:直接手写代码动态添加约束:把NSLayoutConstraint关联到ViewController里再viewDidLoad里面加判断赋值:用size classes(这个目前还不太会).这里分享一个直接在Storyboard里面就适配的办法. 声明 欢迎转载,但请保留文章原始出处:) 博客园:http://www.cnblogs.com 农民伯伯: http://over140.cnblogs.com 正文

ios -使用NSLayoutConstraint实现多个view等宽等高等间距

@interface ViewController () { UIView *firstView; UIView *secondView; UIView *thirdView; } @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; /** 第一个view */ firstView = [[UIView alloc]init]; firstView.translatesAutoresizin

iOS原生自动布局NSLayoutConstraint

目前为止,实现自动布局技术选型方面也可以使用xib和storyboard.在开发过程中通常登录.注册等变动可能性较小的视图,我会采用xib开发,其他页面通常会采用Masonry布局.xib和手码各有优势,视情况而定. 关于NSLayoutAttributeLeading和NSLayoutAttributeTrailing,前边和后边并不是总是为左边和右边的,有些国家的前边是右边后边是左边所以这样设定是为了国际化考虑.还有视图基准线NSLayoutAttributeBaseline通常是指视图的底

自己总结的 iOS ,Mac 开源项目以及库,知识点------持续更新

自己在 git  上看到一个非常好的总结的东西,但是呢, fork  了几次,就是 fork  不到我的 git 上,干脆复制进去,但是,也是认真去每一个每一个去认真看了,并且也是补充了一些,感觉非常棒,所以好东西要分享,为啥用 CN 博客,有个好处,可以随时修改,可以持续更新,不用每次都要再发表,感觉这样棒棒的 我们 自己总结的iOS.mac开源项目及库,持续更新.... github排名 https://github.com/trending,github搜索:https://github.