Masonry 添加约束要注意顺序

对一个视图添加约束,其依赖的约束必须先已经存在,不能依赖该代码后的约束,否则造成不可预料的结果,如下代码能达到预期效果

- (void)makeConstraints {
    __weak typeof(self) weakSelf = self;

    [self.photoMoreButton mas_makeConstraints:^(MASConstraintMaker *make) {
        make.right.equalTo(weakSelf.photoButton).with.offset(-6);
        make.centerY.equalTo(weakSelf.photoButton);
        make.width.and.height.equalTo(@16);
    }];

    [self.photoImageView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.equalTo(weakSelf.photoButton);
        make.right.equalTo(weakSelf.photoMoreButton.mas_left);
        make.width.and.height.equalTo(@64);
    }];
}

但是如果颠倒添加约束的顺序,如下

- (void)makeConstraints {
    __weak typeof(self) weakSelf = self;

    [self.photoImageView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.equalTo(weakSelf.photoButton);
        make.right.equalTo(weakSelf.photoMoreButton.mas_left);
        make.width.and.height.equalTo(@64);
    }];

     [self.photoMoreButton mas_makeConstraints:^(MASConstraintMaker *make) {
        make.right.equalTo(weakSelf.photoButton).with.offset(-6);
        make.centerY.equalTo(weakSelf.photoButton);
        make.width.and.height.equalTo(@16);
    }];
}

则得到的效果如下图

添加约束时 photoImageView 依赖于 photoMoreButton,而当时 photoMoreButton 的约束还未设置,所以导致后面不正确的结果,使用Masonry时要注意这点!

时间: 2024-09-30 00:53:13

Masonry 添加约束要注意顺序的相关文章

控件利用Masonry添加约束之后 不能立刻获取到该控件的尺寸

我们用代码创建了一个按钮  然后利用Masonry来添加宽高和坐标  接下来我们马上需要用到该按钮的尺寸,会发现取到的是{0,0}}  代码如下: //头像按钮 UIButton *portraitBtn = [UIButton new]; [self.view addSubview:portraitBtn]; [portraitBtn mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.offset(80);

【原】iOS学习之Masonry第三方约束

1.Masonry概述 目前最流行的Autolayout第三方框架 用优雅的代码方式编写Autolayout 省去了苹果官方恶心的Autolayout代码 大大提高了开发效率 框架地址:https://github.com/SnapKit/Masonry 2.常用方法 这个方法只会添加新的约束 [blueView mas_makeConstraints:^(MASConstraintMaker *make) { }]; 这个方法会将以前的所有约束删掉,添加新的约束 [blueView mas_r

Storyboard中使用UIscrollView添加约束的开发总结

第一次在项目中用storyboard做界面,一般的界面直接添加约束非常爽快 然后有个界面有scrollview,添加了约束还总是出错 刚开始使用了 wCompact,hRegular,滑动出现问题,有些界面滑动不了或者可以左右滑动 已经在viewDidLoad里面添加了scrollView的contentsize 约束什么的都没有问题,百思不得其解 后来上网查了一下资料 还是scrollView的contentsize的问题 scrollView的contentsize只能在viewDidApp

修改数据表——添加约束

比如,原来数据表根本就没有约束,或者说,约束不够.那么如何来添加约束呢? 添加约束 1.添加主键约束(只能一个) 2.添加唯一约束(可以多个) 3.添加外键约束() 4.添加默认约束() 现在,先创建 create table user2( username varchaer(10) not null , pid smallint unsigned ); show columns from user2; alter table user2 add id smallint unsigned ; s

使用SQL语句向已有数据表添加约束

如果向存在数据的表里添加约束,有可能会出现数据不符合检查约束而造成添加约束失败. 如: 这是一个表,为身份证号添加检查约束. USE DEmo--指向当前操作的数据库 GO ALTER TABLE Employee ADD CONSTRALNT CK_EmployeeID CHECK(LEN(EmployeeID=18) 然后会出现 报错意思是数据表里面的身份证号现有数据有不等于18的,与检查约束冲突,会添加失败. 用ALTER  TABLE Employee+ WITH NOCHECK可以解决

SQL语句创建数据库,SQL语句删除数据库,SQL语句创建表,SQL语句删除表,SQL语句添加约束,SQL语句删除约束

创建数据库: 1 CREATE DATABASE Test --要创建的数据库名称 2 ON PRIMARY 3 ( 4 --数据库文件的具体描述 5 NAME='Test_data', --主数据文件的逻辑名称 6 FILENAME='E:\project\Test_data.mdf', --主数据文件的物理名称 7 SIZE=5MB, --主数据文件的初始大小 8 MAXSIZE=100MB, --主数据文件的增长的最大值 9 FILEGROWTH=15% --主数据文件的增长率 10 )

xib添加约束

一.添加xib 1.当控制器已经创建下单独创建xib(为控制器单独创建xib) 1.单独创建xib,名字要和控制器名字一样. 2.设置xib的控制器类为当前控制器. 3.给当前控制器view拖线为当前xib. 4.如下图: 二.设置约束 1.label 1.label添加约束可以只设置x,y就可以定位label. 2.在xib或storyBoard中换行的快捷键option+回车.

Sybase.在PowerDesigner中如何添加-约束

Sybase.在PowerDesigner中如何添加-约束 资料 2010-06-23 08:57:09 阅读21 评论0   字号:大中小 订阅 唯一约束 唯一约束与创建唯一索引基本上是一回事,因为在创建唯一约束的时候,系统会创建对应的一个唯一索引,通过唯一索引来实现约束.不过唯一约束更直观的表达了对应列的唯一性,使得对应索引的目的更加清晰,所以一般建议创建唯一约束而不是只创建唯一索引. 在PD中创建唯一约束的操作,以教室表来说,RoomID是主键,必然是唯一的,RoomName如果我们也要去

uiscrollView UINavigation和uitabbar添加约束的问题

首先是层次问题, 我的storyboard中 底层是一个View(viewcontroller自带)上面添加了一个UIScrollview(添加约束, 上下左右全为0), 在UIScrollview上添加一个UITableView(添加约束: 上下左右全为0, 宽高分别为当前值, 做拖出宽高的约束, 添加到代码中, 设置可以改变他们的值) ①. 只有UIScrollview的情况, 这时只要把上面约束的宽高分别设下, 分别是[UIScreen mainScreen].bounds.size.wi