屏幕兼容的问题

为了让我们的应用在不容尺寸的屏幕下都能 “正常”的表示,我们尽量不要把数据写死。

大多数可视元素都是一个矩形区域,当然这个矩形区域有坐标的,我们有了这个区域坐标就能确定可视元素的现实位置了。

但是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相关推荐

  1. ios NSLayoutConstraint

    为了让我们的应用在不同尺寸的屏幕下都能 "正常"的表示,我们尽量不要把数据写死.大多数可视元素都是一个矩形区域,当然这个矩形区域有坐标的,我们有了这个区域坐标就能确定可视元素的现实 ...

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

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

  3. UIView 使用NSLayoutConstraint 代码

    为什么80%的码农都做不了架构师?>>>    - (void)addLabelConstraint{[self.nameLabel setTranslatesAutoresizin ...

  4. 关于xib里面的NSLayoutConstraint的multiplier修改

    NSLayoutConstraint的属性multiplier是readonly属性的,适应iPad的时候发现,用multiplier的值有点显示不对,所以想更改的时候就有点悲催了 但是不能更改mul ...

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

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

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

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

  7. Swift开发:NSLayoutConstraint纯代码实现自动布局-初级篇

    要求 宽高200的view,通过代码,使得view在距离父控件的右下角20边距处 /* 约束的设置,控件内部约束由自己添加,比如宽高,如果是与其他的 控件约束那么有父控件添加 *创建约束 NSLayo ...

  8. AutoLayout自动布局,NSLayoutConstraint 视图约束使用

    一.方法 NSLayoutConstraint *constraint = [NSLayoutConstraint constraintWithItem:<#(id)#> attribut ...

  9. NSLayoutConstraint 使用详解 VFL使用介绍

    注意 使用前必须先取消所有的你想设置View 的 Autoresizing 属性 因为 Autoresizing  Layout不能共存  系统默认是 Autoresizing for v in su ...

最新文章

  1. php 去重_php求两数组交集的四种方法详解
  2. 2.3.2 操作系统之实现临界区进程互斥的软件实现方法
  3. DNN结构:CNN、LSTM/RNN中的Attention结构
  4. twisted mysql_在Twisted下用MySQLadbapi获取自增id
  5. matlab 全部的随机数函数
  6. 特斯拉要开杂货铺? 除了卖车还要卖短裤和酒水
  7. VS2010 工具箱组件添加重复
  8. bash 不是内部或外部命令_Python安装时提示“Python不是内部或外部命令...”解决方法...
  9. 大型网站seo方案_网站seo完整的优化方案
  10. eureka集群 ha_SpringCloud如何实现Eureka集群、HA机制-百度经验
  11. SQL Prompt10 安装激活教程,让你写sql 如鱼得水
  12. solid converter pdf解锁密码_pdf转换word文档怎么操作
  13. 特征选择 | MATLAB实现特征变量相关性系数图和显著性检验
  14. 天创速盈:拼多多新店什么时候适合直通车?
  15. python 局域网传文件_Python+pyftpdlib实现局域网文件互传代码示例
  16. Spring中的DataSource
  17. 选择OA,终极“避雷”方法来啦!
  18. 账号被罚了,申诉的结果出来了,果然
  19. 如何抓包分析BLE 空口报文(GAP + GATT + LESC procedure)?
  20. 层次分析法(AHP)基础概念整理+步骤总结

热门文章

  1. 第3周 实践项目2 建设”顺序表“算法库(可参考为模板)
  2. matlab unique函数
  3. 二叉树的递归和非递归遍历
  4. OpenCV函数 Canny 检测边缘
  5. c语言已知斜率 求倾角,倾斜解的问题
  6. oracle12c多个pdb,Oracle 12c 多租户专题|12cR2中PDB内存资源管理
  7. TCP实现在不同局域网下的两台电脑网络通信(Python实现)
  8. [笔记]ndarray切片(python)
  9. t1plus 用什么服务器系统,T1 Plus商贸宝普及版与用友T1系统哪个更好呢?
  10. Oracle 分组统计,抽取每组前十