Masonry適配的簡單使用

一.Masonry是什么:

答:是一個很好的三方,用來做適配的

Masonry是ios中用代碼實現(xiàn)自動布局的一個框架,使用起來特別方便,主要有mas_makeConstraints(添加約束),mas_updateConstraints(更新約束),mas_remakeConstraints(移除約束要謹慎,防止view的fram缺東西)3個方法。

二.怎么使用Masonry

1.導(dǎo)入框架:a.直接拷貝過去 b.用cocospod:pod 'Masonry', '~> 1.0.1'

2.導(dǎo)入頭文件

#define MAS_SHORTHAND

#define MAS_SHORTHAND_GLOBALS//加上這兩個宏就不需要考慮父控件了

#import "Masonry.h"

使用技巧:引入下面2個宏,就不需要加mas_前綴了。

//define this constant if you want touse Masonrywithout the'mas_' prefix

#define MAS_SHORTHAND

//define this constant if you want to enable auto-boxing for default syntax

#define MAS_SHORTHAND_GLOBALS

Shorthand(12月7日新增)

在寫代碼的時候,可能你會感覺有的東西要加mas_前綴,有的東西又不用加,代碼風(fēng)格不統(tǒng)一,而且加mas_前綴還麻煩。

前面介紹過加mas_前綴主要是在擴展系統(tǒng)類的時候為了避免與原有類沖突,這是Apple推薦的做法。不過目前來說,即使不加mas_前綴,也不會有什么問題。所以Masonry提供了不加mas_前綴的方法,只需要你定義幾個宏即可。

MAS_SHORTHAND

定義MAS_SHORTHAND宏之后。可以使用UIView,NSArray中不帶mas_前綴的makeConstraints,updateConstraints,remakeConstraints。以及UIView中不帶mas_前綴的Attribute。

MAS_SHORTHAND_GLOBALS

默認的equalTo方法只接受id類型的對象。有時候我們想傳入一個CGFloat, CGSize, UIEdgeInsets等。還需要將其轉(zhuǎn)化成NSValue對象,比較麻煩。Masonry也考慮到了這種情況。只需要定義MAS_SHORTHAND_GLOBALS宏。就可以直接對equalTo傳入基礎(chǔ)類型。Masonry自動轉(zhuǎn)化成NSValue對象

3.添加約束

?[confirmPayment mas_makeConstraints:^(MASConstraintMaker *make) {


}];

三.舉例說明

1.基本使用(一個控件的布局)

??__weak typeof (self) weakSelf = self;//防止循環(huán)使用

?[confirmPayment mas_makeConstraints:^(MASConstraintMaker *make) {

? ? make.top.equalTo(weakSelf.view).with.offset(10);//距離上面10px

? ? make.left.equalTo(weakSelf.view).with.offset(10);//距離左邊10px

? ? make.bottom.equalTo(weakSelf.view).with.offset(-10);//距離下邊10px

? ? make.right.equalTo(weakSelf.view).with.offset(-10); //距離右邊10px

? ? make.center.equalTo(weakSelf.view);//位于該父視圖的中心

? ??make.size.mas_equalTo(CGSizeMake(150, 60));//設(shè)置這個控件的大小

? ? make.edges.mas_offset(UIEdgeInsetsMake(100, 10, 100, 10));//距離上左下右各為10px

?}];

當(dāng)導(dǎo)入宏

#define MAS_SHORTHAND

#define MAS_SHORTHAND_GLOBALS//加上這兩個宏就不需要考慮父控件了

make.top.equalTo(weakSelf.view).with.offset(10);//距離上面10px

等同于

make.top.equalTo(10)//距離上面10px


2.多個控件(兄弟控件的布局)

? ? ? ?UIView *view2 = [[UILabel alloc]init];

? ? ??? view2.backgroundColor = [UIColor yellowColor];

? ? ??? [self.view addSubview:view2];

? ? ??? [view2 mas_makeConstraints:^(MASConstraintMaker *make) {

? ? ? ? ??????? make.size.mas_equalTo(CGSizeMake(100, 100));

? ? ? ? ??????? make.centerX.equalTo(view1);//view2跟view1的中心X對齊

? ? ? ? ??????? make.top.equalTo(view1.mas_bottom).with.offset(20);//view2距離view1的下面10px

? ? ? ? ??? }];

3 讓一個藍色view的內(nèi)邊距為50,點擊屏幕后內(nèi)邊距變?yōu)?00,具體實現(xiàn)如下(2中寫法):

[blueView?mas_makeConstraints:^(MASConstraintMaker?*make) {

? ? ? ? 第一種寫法

?make.left.top.equalTo(self.view).offset(20);

make.bottom.right.equalTo(self.view).offset(-20);

?第二種寫法

make.edges.insets(UIEdgeInsetsMake(50,?50,?50,?50));

? ? }];

?點擊屏幕后更新約束代碼如下:

[blueView?mas_updateConstraints:^(MASConstraintMaker?*make) {

? ? ? ? 第一種寫法

make.top.left.equalTo(self.view).offset(100);

make.bottom.right.equalTo(self.view).offset(-100);

?第二種寫法

make.edges.insets(UIEdgeInsetsMake(100,?100,?100,?100));

? ? }];

4? ?藍色view距離頂端100,距離左右各20,高度50,黑色view和藍色view右端對其,黑色view頂端距離藍色view底端20,并且寬度是藍色view的一半,截圖和代碼如下(相對于父控件的約束可以省略):

[blueView?mas_makeConstraints:^(MASConstraintMaker?*make) {

make.top.offset(100);

make.left.offset(20);

make.right.offset(-20);

make.height.offset(50);

? ? }];

[blankView?mas_makeConstraints:^(MASConstraintMaker?*make) {

make.right.equalTo(blueView);

make.height.equalTo(blueView);

make.top.equalTo(blueView.mas_bottom).offset(10);

make.width.equalTo(blueView).multipliedBy(0.5);

? ? }];

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容