前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >ios约束

ios约束

作者头像
谦谦君子修罗刀
发布2018-04-28 17:03:27
1.1K0
发布2018-04-28 17:03:27
举报
文章被收录于专栏:谦谦君子修罗刀

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

代码语言:javascript
复制
UIView *red = [[UIView alloc]init];
    red.backgroundColor = [UIColor magentaColor];
    [self.view addSubview:red];
    red.translatesAutoresizingMaskIntoConstraints = NO; // 取消默认的

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

代码语言:javascript
复制
[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添加约束。注:左部和上部为正数,而右边和底部为负数。

代码语言:javascript
复制
 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)这个方法,更新之后还要通知约束更新,并更新布局。

代码语言:javascript
复制
-(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

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2016.10.13 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档