为了让我们的应用在不同尺寸的屏幕下都能 “正常”的表示,我们尽量不要把数据写死。大多数可视元素都是一个矩形区域,当然这个矩形区域有坐标的,我们有了这个区域坐标就能确定可视元素的现实位置了。但是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相关推荐

  1. iOS 5解决Could not instantiate class named NSLayoutConstraint问题

    如果使用Xcode 4.5来新建项目,默认是支持AutoLayout的,但是AutoLayout是iOS 6的新特性,如果在iOS 5的simulator上运行程序,会出现Could not inst ...

  2. 关于iOS 5 Could not instantiate class named NSLayoutConstraint错误

    因为使用Xcode 4.6.2,新建工程的时候SDK 6.1,但是要做低版本适配.在将iOS模拟器选为5.0编译运行时候出现Could not instantiate class named NSLa ...

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

    @interface ViewController () {UIView *firstView;UIView *secondView;UIView *thirdView;} @end@implemen ...

  4. 只有20%的iOS程序员能看懂:详解intrinsicContentSize 及 约束优先级/content Hugging/content Compression Resistance

    在了解intrinsicContentSize之前,我们需要先了解2个概念: AutoLayout在做什么 约束优先级是什么意思. 如果不了解这两个概念,看intinsic content size没 ...

  5. iOS 实现多个可变 cell 复杂界面的制作

    来源:飘游人 www.jianshu.com/p/9fc838d46f5e 如有好文章投稿,请点击 → 这里了解详情 在日常的开发中,有时会遇到内容块比较多,且又可变的界面: 这个界面中有些内容块是固 ...

  6. iOS 自动布局框架 – Masonry 详解

    来源:伯乐在线 - 刘小壮 如有好文章投稿,请点击 → 这里了解详情 如需转载,发送「转载」二字查看说明 目前iOS开发中大多数页面都已经开始使用Interface Builder的方式进行UI开发了 ...

  7. **IOS:xib文件解析(xib和storyboard的比较,一个轻量级一个重量级)

    使用Xcode做iOS项目,经常会和Xib文件打交道,因为Xib文件直观的展现出运行时视图的外观,所以上手非常容易,使用也很方便,但对于从未用纯代码写过视图的童鞋,多数对Xib的理解有些片面. Xib ...

  8. 开始iOS 7中自动布局教程(一)

    2019独角兽企业重金招聘Python工程师标准>>> 发布于:2013-12-03 13:53阅读数:85091 到目前为止,如果你的设计相当的复杂,那么你必须编写大量的代码来适应 ...

  9. 多年iOS开发经验总结(一)

    为什么80%的码农都做不了架构师?>>>    http://www.jianshu.com/p/1ff9e44ccc78 总结了几个月的东西终于能和大家分享了,不多说,直接看东西! ...

最新文章

  1. jzoj zsy家今天的饭_有它拌饭,碗我都能舔干净!老干妈竟然被轻松超越了?
  2. 【Python】高级函数lambda函数
  3. excel中调用python程序_一篇文章带你使用Python搞定对Excel表的读写和处理
  4. 50道编程小题目之【企业利润提成】
  5. System.Web.Caching
  6. ruoyi 多模块部署_基于若依(RuoYi)脚手架的前端项目部署(vue)
  7. Prototype使用$$()函数
  8. unity IEnumerator 协程的理解
  9. java ssh 启动时间_java ssh项目启动异常说明
  10. 电路设计中的防爆设计原理与注意事项分析
  11. 绝佳的充电时间:自我隔离时何不探索这些数据科学技术
  12. WP Engine开发人员工具的好处
  13. python中numpy中的shape和get_shape解析
  14. Python基础语法——基础语法、变量
  15. python查找文字在图片中的位置_使用Python识别图片中的中/英文字
  16. 华为南研所机考练习2 -求最大递增数
  17. #include ““和#include <>区别
  18. Reactive的使用(reactive 和 shallowReactive使用上区别)
  19. java阅读安卓_基于安卓Android的图书阅读与推荐系统APP的设计
  20. 【CAN】CAN总线要点

热门文章

  1. Soft-to-Hard Vector Quantization for End-to-End Learning Compressible Representations
  2. Data - 深入浅出学统计 - 上篇
  3. 写扩展性好的代码:函数
  4. tomcat启动后 项目运行缓慢,要几十到几百秒不等 怎么样./startup.sh 运行加快
  5. jquery-ajax请求:超时设置,增加 loading 提升体验
  6. bzoj 1086: [SCOI2005]王室联邦
  7. Abaqus用户子程序umat的学习
  8. 如何查找特定目录下最大的文件及文件夹
  9. Web用户控件的一个毛病
  10. android mediaplayer状态机