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

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

发表于

我来说两句

0 条评论
登录 后参与评论

相关文章

来自专栏落影的专栏

iOS坐标系探究

APP 在渲染视图时,需要在坐标系中指定绘制区域。这个概念看似乎简单,事实并非如此。

5503
来自专栏游戏杂谈

关于坐标旋转

在看<Flash actionscript动画教程>(中文版)的第十章的第二节,它提到“高级坐标旋转”,书中只给出了一个基本公式:

2262
来自专栏计算机视觉与深度学习基础

Leetcode 221. Maximal Square

Given a 2D binary matrix filled with 0's and 1's, find the largest square conta...

20410
来自专栏深度学习思考者

一文搞懂Matlab画图那些事(上篇)

题记:临时需要Matlab画个曲线图,突然发现有些命令竟然忘掉了,于是各种查。这里博主整理合并关于画图那些命令,只为让你轻松搞定Matlab画图这些琐事,那么,...

3287
来自专栏PPV课数据科学社区

数据挖掘知识脉络与资源整理(七)–饼图

? ? 简介 饼图英文学名为Sector Graph, 有名Pie Graph。常用于统计学模块。2D饼图为圆形,手画时,常用圆规作图。 仅排列在工作表的一...

2917
来自专栏python3

tkinter -- Label使用图像与文本

compound: 指定文本(text)与图像(bitmap(内置图)/image(自定义图片)是如何在Label上显示,当指定image/bitmap时,会显...

721
来自专栏生信技能树

用python编写验证码

作为一个用python的生信工程师,平时工作中除了用python来处理些文本文件和搭建流程,没事也想探索些其他有趣的功能。这几天就在网上学习了下如何用pytho...

3855
来自专栏数据小魔方

蛇形图

今天要跟大家分享的图表是蛇形图! 该图表的制作原理很类似之前讲过的垂直折线图,不过这里要复杂一些,会用到很多错位排列的技巧。 下面就开始吧,还是首选让大家看一下...

3825
来自专栏ml

初学java之(盒子分布)

1 import javax.swing.*; 2 3 import java.awt.*; 4 class WinGrid extends JFr...

49410
来自专栏Android知识点总结

D4-Android绘图之和我一起画箭头

932

扫码关注云+社区