ios NSLayoutConstraint
为了让我们的应用在不同尺寸的屏幕下都能 “正常”的表示,我们尽量不要把数据写死。大多数可视元素都是一个矩形区域,当然这个矩形区域有坐标的,我们有了这个区域坐标就能确定可视元素的现实位置了。但是iphone5和以前的屏幕不一样了,在以前的设备中,我们可以添加一个 xx.@2x.png来适应retina屏幕,但是iphoen5咋办呢?ios6引入了 Auto Layout的东东,这个要和UIViewAutoresizing区分下。
1.看下面代码:
-(void)viewDidLoad
{
[superviewDidLoad];
UIView *aView =[[UIView alloc] init];
aView.backgroundColor = [UIColor redColor];
//为了不和autosizing冲突,我们设置No
[aView setTranslatesAutoresizingMaskIntoConstraints:NO];//不把AutoresizingMask转化为Constraints
[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);
/* This macro is a helper for making view dictionariesfor +constraintsWithVisualFormat:options:metrics:views:.
NSDictionaryOfVariableBindings(v1, v2, v3) isequivalent(等效于) to [NSDictionarydictionaryWithObjectsAndKeys:v1, @"v1", v2, @"v2", v3,@"v3", nil];
*/
[self.viewaddConstraints:
[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.viewaddConstraints:
[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.viewaddConstraint:
[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.viewaddConstraint:
[NSLayoutConstraint constraintWithItem:bView
attribute:NSLayoutAttributeTop
relatedBy:NSLayoutRelationEqual
toItem:aView
attribute:NSLayoutAttributeTop
multiplier:1
constant:0]];
[aView release];
[bView release];
}
2.constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:
/* Create constraints explicitly. Constraints are of the form "view1.attr1 = view2.attr2 * multiplier + constant"
If your equation does not have a second view and attribute, use nil and NSLayoutAttributeNotAnAttribute.
*/
3.属性
typedefNS_ENUM(NSInteger, NSLayoutAttribute) {
NSLayoutAttributeLeft = 1,
NSLayoutAttributeRight,
NSLayoutAttributeTop,
NSLayoutAttributeBottom,
NSLayoutAttributeLeading,
NSLayoutAttributeTrailing,
NSLayoutAttributeWidth,
NSLayoutAttributeHeight,
NSLayoutAttributeCenterX,
NSLayoutAttributeCenterY,
NSLayoutAttributeBaseline,
NSLayoutAttributeNotAnAttribute = 0
};
4.关系
typedefNS_ENUM(NSInteger, NSLayoutRelation) {
NSLayoutRelationLessThanOrEqual = -1,
NSLayoutRelationEqual = 0,
NSLayoutRelationGreaterThanOrEqual = 1,
};
最后的结果就是 “view1.attr1 <= 或者 == 或者 >= view2.attr2 * multiplier + constant”
5.Visual Format Language (视觉形式语言)
ios NSLayoutConstraint相关推荐
- 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 ...
- ios -使用NSLayoutConstraint实现多个view等宽等高等间距
@interface ViewController () {UIView *firstView;UIView *secondView;UIView *thirdView;} @end@implemen ...
- 只有20%的iOS程序员能看懂:详解intrinsicContentSize 及 约束优先级/content Hugging/content Compression Resistance
在了解intrinsicContentSize之前,我们需要先了解2个概念: AutoLayout在做什么 约束优先级是什么意思. 如果不了解这两个概念,看intinsic content size没 ...
- iOS 实现多个可变 cell 复杂界面的制作
来源:飘游人 www.jianshu.com/p/9fc838d46f5e 如有好文章投稿,请点击 → 这里了解详情 在日常的开发中,有时会遇到内容块比较多,且又可变的界面: 这个界面中有些内容块是固 ...
- iOS 自动布局框架 – Masonry 详解
来源:伯乐在线 - 刘小壮 如有好文章投稿,请点击 → 这里了解详情 如需转载,发送「转载」二字查看说明 目前iOS开发中大多数页面都已经开始使用Interface Builder的方式进行UI开发了 ...
- **IOS:xib文件解析(xib和storyboard的比较,一个轻量级一个重量级)
使用Xcode做iOS项目,经常会和Xib文件打交道,因为Xib文件直观的展现出运行时视图的外观,所以上手非常容易,使用也很方便,但对于从未用纯代码写过视图的童鞋,多数对Xib的理解有些片面. Xib ...
- 开始iOS 7中自动布局教程(一)
2019独角兽企业重金招聘Python工程师标准>>> 发布于:2013-12-03 13:53阅读数:85091 到目前为止,如果你的设计相当的复杂,那么你必须编写大量的代码来适应 ...
- 多年iOS开发经验总结(一)
为什么80%的码农都做不了架构师?>>> http://www.jianshu.com/p/1ff9e44ccc78 总结了几个月的东西终于能和大家分享了,不多说,直接看东西! ...
最新文章
- jzoj zsy家今天的饭_有它拌饭,碗我都能舔干净!老干妈竟然被轻松超越了?
- 【Python】高级函数lambda函数
- excel中调用python程序_一篇文章带你使用Python搞定对Excel表的读写和处理
- 50道编程小题目之【企业利润提成】
- System.Web.Caching
- ruoyi 多模块部署_基于若依(RuoYi)脚手架的前端项目部署(vue)
- Prototype使用$$()函数
- unity IEnumerator 协程的理解
- java ssh 启动时间_java ssh项目启动异常说明
- 电路设计中的防爆设计原理与注意事项分析
- 绝佳的充电时间:自我隔离时何不探索这些数据科学技术
- WP Engine开发人员工具的好处
- python中numpy中的shape和get_shape解析
- Python基础语法——基础语法、变量
- python查找文字在图片中的位置_使用Python识别图片中的中/英文字
- 华为南研所机考练习2 -求最大递增数
- #include ““和#include <>区别
- Reactive的使用(reactive 和 shallowReactive使用上区别)
- java阅读安卓_基于安卓Android的图书阅读与推荐系统APP的设计
- 【CAN】CAN总线要点
热门文章
- Soft-to-Hard Vector Quantization for End-to-End Learning Compressible Representations
- Data - 深入浅出学统计 - 上篇
- 写扩展性好的代码:函数
- tomcat启动后 项目运行缓慢,要几十到几百秒不等 怎么样./startup.sh 运行加快
- jquery-ajax请求:超时设置,增加 loading 提升体验
- bzoj 1086: [SCOI2005]王室联邦
- Abaqus用户子程序umat的学习
- 如何查找特定目录下最大的文件及文件夹
- Web用户控件的一个毛病
- android mediaplayer状态机