博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
NSLayoutConstraint
阅读量:7194 次
发布时间:2019-06-29

本文共 2804 字,大约阅读时间需要 9 分钟。

屏幕兼容的问题

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

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

但是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”

转载地址:http://bgvkm.baihongyu.com/

你可能感兴趣的文章
MongoDB服务无法启动,windows提示发生服务特定错误:100
查看>>
A Simple OpenGL Shader Example
查看>>
资料整理面试
查看>>
理解JavaScript中的事件处理
查看>>
lock: mutex/spinlock/shared lock
查看>>
基于JAVA的身份证实名认证接口调用代码实例
查看>>
Shell命令-文件压缩解压缩之tar、unzip
查看>>
挺有意思的一段VBS代码,让系统阅读/朗读指定文本
查看>>
mysql体系结构
查看>>
CSS实现图片半透明代码
查看>>
hdu 4135 Co-prime (素数打表+容斥原理)
查看>>
manacher算法求最长回文子串
查看>>
(转)IDataGridViewEditingControl 接口 作用
查看>>
ie兼容性问题的一些总结,待添加。后续有图
查看>>
获取客户端IP
查看>>
【论文阅读】StainGAN: Stain Style Transfer for Digital Histological Images
查看>>
细节性的错误
查看>>
c++中string的用法
查看>>
oracle中if/else功能的实现的3种写法
查看>>
获取当前控制器
查看>>