搜索
您的当前位置:首页正文

ios约束

来源:二三娱乐

一、苹果的VFL语法约束
在使用约束之前,要先将没有设置frame的view添加到父视图上。如何将view设置为使用AutoLayout约束,取消默认约束。

UIView *red = [[UIView alloc]init];
    red.backgroundColor = [UIColor magentaColor];
    [self.view addSubview:red];
    red.translatesAutoresizingMaskIntoConstraints = NO; // 取消默认的

语法说明:
format:VFL语句,字符串
H:垂直位置
-:某两个视图之间的距离
|:表示父视图
[view]:表示对哪个视图进行约束
(==):表示约束的值
下面是VFL约束的Demo

[self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"H:|-10-[red]-10-|" options:0 metrics:nil views:NSDictionaryOfVariableBindings(red)]];
    [self.view addConstraints:[NSLayoutConstraint constraintsWithVisualFormat:@"V:|-20-[red(==100)]" options:0 metrics:nil     views:NSDictionaryOfVariableBindings(red)]];

二、第三方库Masonry建立约束
与VFL语法相似,用Masonry约束的view也不需要设置frame,使用mas_makeConstraints:^(MASConstraintMaker *make)就可以为view添加约束。注:左部和上部为正数,而右边和底部为负数。

 cyan = [[UIView alloc]init];
    cyan.backgroundColor = [UIColor cyanColor];
    [self.view addSubview:cyan];
[cyan mas_makeConstraints:^(MASConstraintMaker *make) {
        
      /*  make.right.equalTo(@-50); // 右边和底部为负数
        make.top.equalTo(@50);
        make.left.equalTo(@50);
//        make.left.and.top.equalTo(@50);and只是连接词
        make.height.equalTo(@100);
       */
        
        // 上左下右
//        make.edges.mas_equalTo(UIEdgeInsetsMake(50, 50, 50, 100));
        
        make.left.top.equalTo(@0);
        // 倍数
        make.width.height.equalTo(self.view).multipliedBy(0.5);
    }];

更新约束及移除约束。更新约束使用mas_updateConstraints:^(MASConstraintMaker *make)这个方法,更新之后还要通知约束更新,并更新布局。

-(void)touchesBegan:(NSSet<UITouch *> *)touches withEvent:(UIEvent *)event
{
    // 更新约束
    [UIView animateWithDuration:2 animations:^{
        [cyan mas_updateConstraints:^(MASConstraintMaker *make) {
        make.height.equalTo(@200);
    }];
        [cyan setNeedsLayout]; // 通知约束更新
        [cyan layoutIfNeeded];
    }];
    // 将现有的约束全部移除
    [UIView animateWithDuration:2 animations:^{
       [cyan mas_remakeConstraints:^(MASConstraintMaker *make) {
           make.edges.mas_equalTo(UIEdgeInsetsMake(50, 50, 200, 150));
       }];
        [cyan setNeedsLayout];
        [cyan layoutIfNeeded];
    }];
}

三、AutoLayout约束

AutoLayout约束图解.png
Top