新手如何使用Masonry 布局

Masonry的使用

(一)Masonry介紹

Masonry是一個輕量級的布局框架 擁有自己的描述語法 采用更優(yōu)雅的鏈?zhǔn)秸Z法封裝自動布局 ,支持 iOS 和 Max OS X。 Masonry是一個用代碼寫iOS或os界面的庫,可以代替Auto layout。 Masonry的github地址:https://github.com/SnapKit/Masonry。

(二)Masonry使用講解

自動布局中屬性對照表mas_makeConstraints 是給view添加約束,約束有幾種,分別是邊距,寬,高,左上右下距離,基準(zhǔn)線。添加過約束后可以有修正,修正 有offset(位移)修正和multipliedBy(倍率)修正

@property?(nonatomic,?strong,?readonly)?MASConstraint?*left;? ? //左側(cè)

@property?(nonatomic,?strong,?readonly)?MASConstraint?*top;? //上側(cè)

@property?(nonatomic,?strong,?readonly)?MASConstraint?*right; //右側(cè)

@property?(nonatomic,?strong,?readonly)?MASConstraint?*bottom; //下側(cè)

@property?(nonatomic,?strong,?readonly)?MASConstraint?*leading; //首部

@property?(nonatomic,?strong,?readonly)?MASConstraint?*trailing; //尾部

@property?(nonatomic,?strong,?readonly)?MASConstraint?*width; //寬

@property?(nonatomic,?strong,?readonly)?MASConstraint?*height; //高

@property?(nonatomic,?strong,?readonly)?MASConstraint?*centerX; //橫向中點(diǎn)

@property?(nonatomic,?strong,?readonly)?MASConstraint?*centerY; //縱向中點(diǎn)

@property?(nonatomic,?strong,?readonly)?MASConstraint?*baseline; //文本基線

語法一般是 make.equalTo or make.greaterThanOrEqualTo or make.lessThanOrEqualTo + 倍數(shù)和位移修正

注意點(diǎn)1: 使用 mas_makeConstraints方法的元素必須事先添加到父元素的中,例如[self.view addSubview:view];

注意點(diǎn)2: mas_equalTo 和 equalTo 區(qū)別:mas_equalTo 比equalTo多了類型轉(zhuǎn)換操作,一般來說,大多數(shù)時候兩個方法都是 通用的,但是對于數(shù)值元素使用mas_equalTo。對于對象或是多個屬性的處理,使用equalTo。特別是多個屬性時,必須使用equalTo,例如 make.left.and.right.equalTo(self.view);

注意點(diǎn)3: 注意到方法with和and,這連個方法其實沒有做任何操作,方法只是返回對象本身,這這個方法的左右完全是為了方法寫的時候的可讀性 。make.left.and.right.equalTo(self.view);和make.left.right.equalTo(self.view);是完全一樣的,但是明顯的加了and方法的語句可讀性 更好點(diǎn)。

本文會簡單的講解一下如何使用Masonry 進(jìn)行布局。

示例一:

如圖所示,一共四個View,第一個view,在Controller中處于上下等邊距,左右等邊距的位置,也就是說,這個view的中心點(diǎn)和self.view的中點(diǎn)相同


所以,我們進(jìn)行布局的時候,只需要設(shè)置其大小即可,如果,你想要這個view的大小隨著屏幕能夠進(jìn)行更改,那么你可以將make.size.mas_equalTo(CGSizeMake(300, 300));更改為make.edges.equalTo(weakSelf.view).with.insets(UIEdgeInsetsMake(100, 50, 100, 50));,這樣這個view就不是固定大小的view了。

第二個view,是背景色為黃色的view,你可以看到,第二個view距第一個view,uv的上下左右邊距都是10,這時候,你有很多種寫法,當(dāng)然,筆者建議的寫法是make.edges.equalTo(uv).with.insets(UIEdgeInsetsMake(10, 10, 10, 10));一句搞定,簡單易懂。

有時候開發(fā)的過程中,產(chǎn)品或者UI設(shè)計出來的圖需要兩個大小相同邊距view或者button,并排排列在同一個view上,且,不論橫屏或者豎屏都不變大小,這時候,怎么辦呢,這時候,你可以在view的中間設(shè)計一個占位view,設(shè)置邊距,不設(shè)置大小,大小隨著屏幕變化而變化即可。

事例2.

使用masonry 布局一個計算器,根據(jù)圖,我們知這個鍵盤是一個五行四列的布局,顯示的view是一個view和label的結(jié)合布局,那么我們需要如果去編寫代碼呢?

首先呢,我們可以先布頂部的View和label,布完以后,進(jìn)行鍵盤的布局,鍵盤上所有按鈕,放在一個背景view上,這個背景view左右緊挨著self.view,top挨著顯示view的底部,下部緊挨著self.view的底部,所以

[keyBoardView mas_makeConstraints:^(MASConstraintMaker *make) {

make.top.equalTo(backDisplayView.mas_bottom);

make.bottom.equalTo(weakSelf.view.mas_bottom);

make.right.and.left.equalTo(weakSelf.view);

}];我們就可以這樣布局。

那么背景view有了,如何進(jìn)行鍵盤內(nèi)容的布局呢,我們可以將鍵盤假設(shè)為五行四列,第五行的按鈕變?yōu)?個了,我們可以將原有的四個按鈕,第一第二個變?yōu)橐粋€,也就是說,第一個占兩個位置,第二個去除

/處理 0 合并單元格

if ([key isEqualToString:@"0"] || [key isEqualToString:@"?"]) {

if ([key isEqualToString:@"0"]) {

//? ? ? ? ? ? ? ? ? ? [keyView mas_makeConstraints:^(MASConstraintMaker *make) {

make.height.equalTo(keyBoardView.mas_height).with.multipliedBy(.2f);

make.width.equalTo(keyBoardView.mas_width).with.multipliedBy(.5f);

make.left.equalTo(keyBoardView.mas_left);

make.baseline.equalTo(keyBoardView.mas_baseline).with.multipliedBy(0.9f);

//? ? ? ? ? ? ? ? ? ? }];

}else{

[keyView removeFromSuperview];

}

}

其他的就基于multipliedBy 基于mas_baseline進(jìn)行分割即可 。

3.創(chuàng)建一個常用的視圖

這是一個開發(fā)中,常見到的一個頁面視圖。代碼也在demo中有所展示,cell定制,demo的下載地址為github.com/15395401361/HowUserMasonry.git,歡迎下載研究,喜歡的話,順便給給?。??。

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

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

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