NSLayoutConstraint
屏幕兼容的问题
为了让我们的应用在不容尺寸的屏幕下都能 “正常”的表示,我们尽量不要把数据写死。
大多数可视元素都是一个矩形区域,当然这个矩形区域有坐标的,我们有了这个区域坐标就能确定可视元素的现实位置了。
但是iphone5 和以前的屏幕不一样了,在以前的设备中,我们可以添加一个 xx.@2x.png 来适应retina屏幕,但是iphoen5咋办呢?
ios 引入了 Auto Layout 的东东,这个要和UIViewAutoresizing 区分下。
看下面代码
- (void)viewDidLoad
{
[super viewDidLoad];
UIView *aView = [[UIView alloc] init];
aView.backgroundColor = [UIColor redColor];
//为了不和autosizing冲突,我们设置No
[aView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:aView];
UIView *bView = [[UIView alloc] init];
bView.backgroundColor = [UIColor blueColor];
[bView setTranslatesAutoresizingMaskIntoConstraints:NO];
[self.view addSubview:bView];
NSDictionary *views = NSDictionaryOfVariableBindings(aView, bView);
//NSDictionaryOfVariableBindings 宏 其实 NSDictionaryOfVariableBindings(v1, v2, v3) 等效于 [NSDictionary dictionaryWithObjectsAndKeys:v1, @"v1", v2, @"v2", v3, @"v3", nil];
[self.view addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-(>=50)-[aView(100)]"
options:0
metrics:nil
views:views]];
[self.view addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-(>=100)-[aView(50)]"
options:0
metrics:nil
views:views]];
[self.view addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"H:[bView(==aView)]"
options:0
metrics:nil
views:views]];
[self.view addConstraints:
[NSLayoutConstraint constraintsWithVisualFormat:@"V:[bView(==aView)]"
options:0
metrics:nil
views:views]];
[self.view addConstraint:
[NSLayoutConstraint constraintWithItem:bView
attribute:NSLayoutAttributeLeft
relatedBy:NSLayoutRelationEqual
toItem:aView
attribute:NSLayoutAttributeRight
multiplier:1
constant:10]];
//添加一个限制 等效于 bView.frame.origin.x = (aView.frame.origin.x +aView.frame.size.width) * 1 + 10,好像是这样的!个人觉得!
它是一种依赖关系,bView依赖aView,这样就算aView变了,bView也会跟着变换。
[self.view addConstraint:
[NSLayoutConstraint constraintWithItem:bView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:aView
attribute:NSLayoutAttributeTop
multiplier:1
constant:0]];
[aView release];
[bView release];
}
constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
Create a constraint of the form "view1.attr1 <relation> view2.attr2 * multiplier + constant".
属性
typedef NS_ENUM(NSInteger, NSLayoutAttribute) {
NSLayoutAttributeLeft = 1,
NSLayoutAttributeRight,
NSLayoutAttributeTop,
NSLayoutAttributeBottom,
NSLayoutAttributeLeading,
NSLayoutAttributeTrailing,
NSLayoutAttributeWidth,
NSLayoutAttributeHeight,
NSLayoutAttributeCenterX,
NSLayoutAttributeCenterY,
NSLayoutAttributeBaseline,
NSLayoutAttributeNotAnAttribute = 0
};
关系
typedef NS_ENUM(NSInteger, NSLayoutRelation) {
NSLayoutRelationLessThanOrEqual = -1,
NSLayoutRelationEqual = 0,
NSLayoutRelationGreaterThanOrEqual = 1,
};
最后的结果就是 “view1.attr1 < >= 或者 == 或者 <= > view2.attr2 * multiplier + constant”
转载于:https://www.cnblogs.com/DamonTang/p/3570743.html
NSLayoutConstraint相关推荐
- ios NSLayoutConstraint
为了让我们的应用在不同尺寸的屏幕下都能 "正常"的表示,我们尽量不要把数据写死.大多数可视元素都是一个矩形区域,当然这个矩形区域有坐标的,我们有了这个区域坐标就能确定可视元素的现实 ...
- ios -使用NSLayoutConstraint实现多个view等宽等高等间距
@interface ViewController () {UIView *firstView;UIView *secondView;UIView *thirdView;} @end@implemen ...
- UIView 使用NSLayoutConstraint 代码
为什么80%的码农都做不了架构师?>>> - (void)addLabelConstraint{[self.nameLabel setTranslatesAutoresizin ...
- 关于xib里面的NSLayoutConstraint的multiplier修改
NSLayoutConstraint的属性multiplier是readonly属性的,适应iPad的时候发现,用multiplier的值有点显示不对,所以想更改的时候就有点悲催了 但是不能更改mul ...
- iOS 5解决Could not instantiate class named NSLayoutConstraint问题
如果使用Xcode 4.5来新建项目,默认是支持AutoLayout的,但是AutoLayout是iOS 6的新特性,如果在iOS 5的simulator上运行程序,会出现Could not inst ...
- 关于iOS 5 Could not instantiate class named NSLayoutConstraint错误
因为使用Xcode 4.6.2,新建工程的时候SDK 6.1,但是要做低版本适配.在将iOS模拟器选为5.0编译运行时候出现Could not instantiate class named NSLa ...
- Swift开发:NSLayoutConstraint纯代码实现自动布局-初级篇
要求 宽高200的view,通过代码,使得view在距离父控件的右下角20边距处 /* 约束的设置,控件内部约束由自己添加,比如宽高,如果是与其他的 控件约束那么有父控件添加 *创建约束 NSLayo ...
- AutoLayout自动布局,NSLayoutConstraint 视图约束使用
一.方法 NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:<#(id)#> attribut ...
- NSLayoutConstraint 使用详解 VFL使用介绍
注意 使用前必须先取消所有的你想设置View 的 Autoresizing 属性 因为 Autoresizing Layout不能共存 系统默认是 Autoresizing for v in su ...
最新文章
- php 去重_php求两数组交集的四种方法详解
- 2.3.2 操作系统之实现临界区进程互斥的软件实现方法
- DNN结构:CNN、LSTM/RNN中的Attention结构
- twisted mysql_在Twisted下用MySQLadbapi获取自增id
- matlab 全部的随机数函数
- 特斯拉要开杂货铺? 除了卖车还要卖短裤和酒水
- VS2010 工具箱组件添加重复
- bash 不是内部或外部命令_Python安装时提示“Python不是内部或外部命令...”解决方法...
- 大型网站seo方案_网站seo完整的优化方案
- eureka集群 ha_SpringCloud如何实现Eureka集群、HA机制-百度经验
- SQL Prompt10 安装激活教程,让你写sql 如鱼得水
- solid converter pdf解锁密码_pdf转换word文档怎么操作
- 特征选择 | MATLAB实现特征变量相关性系数图和显著性检验
- 天创速盈:拼多多新店什么时候适合直通车?
- python 局域网传文件_Python+pyftpdlib实现局域网文件互传代码示例
- Spring中的DataSource
- 选择OA,终极“避雷”方法来啦!
- 账号被罚了,申诉的结果出来了,果然
- 如何抓包分析BLE 空口报文(GAP + GATT + LESC procedure)?
- 层次分析法(AHP)基础概念整理+步骤总结
热门文章
- 第3周 实践项目2 建设”顺序表“算法库(可参考为模板)
- matlab unique函数
- 二叉树的递归和非递归遍历
- OpenCV函数 Canny 检测边缘
- c语言已知斜率 求倾角,倾斜解的问题
- oracle12c多个pdb,Oracle 12c 多租户专题|12cR2中PDB内存资源管理
- TCP实现在不同局域网下的两台电脑网络通信(Python实现)
- [笔记]ndarray切片(python)
- t1plus 用什么服务器系统,T1 Plus商贸宝普及版与用友T1系统哪个更好呢?
- Oracle 分组统计,抽取每组前十