Masonry設置約束優先級[轉]


原文:http://www.jianshu.com/p/b0e1797036fe

 

#####前言:以前看到那種布局好的界面,當其中一個控件消失后,其余控件自動調整約束,還不知道怎么實現。 下去學習了一下,其實就是設置約束有先級的問題。 下面直接上代碼,布局用的是Masonry

pragma mark - 1. 先看看效果哈

純代碼約束優先級.gif
pragma mark - 2. 代碼實現加簡單注釋
#import "ViewController.h" #import "Masonry.h" @interface ViewController () //設置三個View /**<#XXX#>*/ @property (nonatomic , strong) UIView * orangeView; /**<#XXX#>*/ @property (nonatomic , strong) UIView * yellowView; /**<#XXX#>*/ @property (nonatomic , strong) UIView * greenView; @end @implementation ViewController - (void)viewDidLoad { [super viewDidLoad]; //1.添加三個View UIView *orangeView = [[UIView alloc]init]; orangeView.backgroundColor = [UIColor orangeColor]; [self.view addSubview:orangeView]; self.orangeView = orangeView; //2. UIView *yellowView = [[UIView alloc]init]; yellowView.backgroundColor = [UIColor yellowColor]; [self.view addSubview:yellowView]; self.yellowView = yellowView; //3. UIView *greenView = [[UIView alloc]init]; greenView.backgroundColor = [UIColor greenColor]; [self.view addSubview:greenView]; self.greenView = greenView; //配置約束 [self setUpRestrain]; } //配置約束 -(void)setUpRestrain { __weak typeof( self) weakSelf = self; #對於橙色View只需正常設置約束就好 [self.orangeView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(100); make.left.offset(10); make.top.offset(50); }]; #黃色View只會發生一次變化,就多設一個優先級較低的約束就好 [self.yellowView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(100); make.left.equalTo(weakSelf.orangeView.mas_right).offset(20); make.top.offset(50); #當橙色View消失后,黃色View缺少左邊約束,所以給其加一個優先級更低的左邊約束。當第一個左邊約束失效后,這個約束就起作用了 make.left.equalTo(weakSelf.view.mas_left).offset(20).priority(300); }]; #同理綠色View的低級約束就得設置兩個 [self.greenView mas_makeConstraints:^(MASConstraintMaker *make) { make.width.height.mas_equalTo(100); make.left.equalTo(weakSelf.yellowView.mas_right).offset(20); make.top.offset(50); make.left.equalTo(weakSelf.orangeView.mas_right).offset(20).priority(300); make.left.equalTo(weakSelf.view.mas_left).offset(20).priority(250); }]; } //刪除黃色View - (IBAction)cancelYellowBtn:(id)sender { #這里有個知識點:用約束布局實現動畫,布局代碼寫在外面,然后調用強制布局方法寫在UIView動畫里面 [self.yellowView removeFromSuperview]; [UIView animateWithDuration:0.5 animations:^{ //強制刷新布局 [self.view layoutIfNeeded]; }]; } //刪除橙色View - (IBAction)cancelGreenBtn:(id)sender { [self.orangeView removeFromSuperview]; [UIView animateWithDuration:0.5 animations:^{ //強制刷新布局 [self.view layoutIfNeeded]; }]; }


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM