在iOS開發過程當中,手寫contraints是很是痛苦的一件事情,每每那麼一丟丟功能要寫大量的代碼,很是容易發生錯誤,而且很是不方便調試。因此只有在不得以的狀況下才採用手工方式寫contraints,通常都在Storyboard中完成,但Storyboard也是一個坑爹的東東,特別是在SVN協做工做時各類問題不甚其煩;可是後來知道了Masonry,體驗了一段時間,很是好用,自此不多再使用storyboard寫UI了。spa
安裝使用Masonry的方式不止一種,但比較推薦的方式是使用CocoaPods來管理,具體的作法是在Podfile中添加一句pod 'Masonry'
,固然也能夠指定版本:pod 'Masonry', '~> 0.6.1'
;對於Masonry這種第三方庫,可能在任何頁面中都會涉及到,因此最好在prefix pch文件中添加#import "Masonry.h"
,默認狀況下,Masonry中的相關資源都有mas前綴,譬如mas_makeConstraints方法、mas_left屬性等等,若是不想使用mas前綴,則能夠在#import "Masonry.h"
以前能夠先定義一個宏#define MAS_SHORTHAND
,但不推薦這樣作,由於mas_left比left更不容易與其餘的資源名稱衝突。調試
UIView *redView = ({ UIView *view = [[UIView alloc] init]; view.backgroundColor = [UIColor redColor]; view; }); [self.view addSubview:redView]; UIView *yellowView = ({ UIView *view = [[UIView alloc] init]; view.backgroundColor = [UIColor yellowColor]; view; }); [self.view addSubview:yellowView]; UIEdgeInsets viewInsets = UIEdgeInsetsMake(100, 10, 0, 10); [redView mas_makeConstraints:^(MASConstraintMaker *make) { UIView *superView = self.view; make.left.equalTo(superView).insets(viewInsets); make.right.equalTo(yellowView.mas_left).offset(-10); make.top.equalTo(superView).insets(viewInsets); make.width.equalTo(yellowView.mas_width).offset(0); make.height.equalTo(@100); }]; [yellowView mas_makeConstraints:^(MASConstraintMaker *make) { UIView *superView = self.view; make.right.equalTo(superView).insets(viewInsets); make.left.equalTo(redView.mas_right).offset(10); make.top.equalTo(superView).insets(viewInsets); make.width.equalTo(redView.mas_width).offset(0); make.height.equalTo(@100); }];
效果以下:code