Masonry的寫法總結

2021-09-24 22:23:02 字數 4725 閱讀 6367

masonry使用鏈式方式程式設計,有定義一些巨集來方便開發,如下:

#define offset(...)                      mas_offset(__va_args__)

#define equalto(...) mas_equalto(__va_args__)

#define greaterthanorequalto(...) mas_greaterthanorequalto(__va_args__)

#define lessthanorequalto(...) mas_lessthanorequalto(__va_args__)

如:

// make.left 以下兩種寫法等價

make.left.equalto(superview.mas_left).offset(10);

make.left.mas_equalto(superview.mas_left).mas_offset(10);

約束屬性有三種關係,分別是等於,大於,小於。

//.equalto

// view.width = 60

make.width.mas_equalto(60);

//.lessthanorequalto

// view.width <= 120

make.width.lessthanorequalto(120);

//.greaterthanorequalto 

// view.width >= 60

make.width.lessthanorequalto(60);

對於自動布局我們只需要設定好view的position,包括x軸和y軸上的位置,以及view的長寬即可。

masonry除了設定單個約束以外,還提供了很多方便的復合約束設定方式。以下分別介紹單個約束屬性設定方式和復合約束設定方式。

長度和寬度

// make width = 60

make.width.mas_equalto(60);

// make height = 60

make.height.mas_equalto(60);

// make height = 60, width = 60

make.size.equalto(cgsizemake(60, 60));

// make view1.height = view2.height view1.width = view2.width

make.size.mas_equalto(view2)

// make width and height greater than or equal to view2

make.size.greaterthanorequalto(view2)

// make width = superview.width + 100, height = superview.height - 50

make.size.equalto(superview).sizeoffset(cgsizemake(100, -50))

邊距對齊(位置設定)
make.left.mas_equalto(superview.mas_left).mas_offset(10);

make.left.mas_greaterthanorequalto(10);

約束的鏈式寫法中,不包含其他相對的view時,預設為其superview view.left 等於 label.lefet,以下三種寫法等價:

make.left.mas_equalto(100); 

make.left.mas_equalto(view.superview.mas_left).offset(10);

make.left.mas_equalto(view.superview).offset(10);

view.left 大於等於 label.lefet,以下兩種寫法等同:

make.left.greaterthanorequalto(label);

make.left.greaterthanorequalto(label.mas_left);

上下左右四個邊緣等於父檢視的邊緣,也就是top, left, bottom, right equal view2,以下三種寫法等同(復合約束寫法):

make.edges.equalto(superview);

make.edges.equalto(superview).insets(uiedgeinsetsmake(0, 0, 0, 0))

make.left.right.and.bottom.equalto(superview);

ps:如果top, left, bottom, right的邊距各自不同:

// make top = superview.top + 5, left = superview.left + 10,

// bottom = superview.bottom - 15, right = superview.right - 20

make.edges.equalto(superview).insets(uiedgeinsetsmake(5, 10, 15, 20))

中心對齊(位置設定)

x軸上中心和superview的x軸上中心對齊。

make.centerx.equalto(superview.mas_centerx).offet(0)

make.centerx.equalto(superview.mas_centerx)

make.centerx.equalto(superview)

x軸和y軸中心對齊

make.center.equalto(superview)

make.center.equalto(superview).centeroffset(cgpointmake(0, 0))

ps:如果x軸和y軸上的中心對齊各自不同:

// make centerx = superview.centerx - 5, centery = superview.centery + 10

make.center.equalto(superview).centeroffset(cgpointmake(-5, 10))

約束數字值

masonry允許將寬度和高度設定為常量值。如果要將檢視設定乙個最小和最大寬度時,可以在block中同時設定:

//width >= 200 && width <= 400

make.width.greaterthanorequalto(@200);

make.width.lessthanorequalto(@400)

masonry不允許把邊距屬性(left,top,right,bottom,centerx,centery)的約束設定為常量值,如果設定了,會預設這些屬性是相對父檢視設定的。

//creates view.left = view.superview.left + 10

make.left.equalto(@10)

//creates view.left = view.superview.left + 10

make.left.lessthanorequalto(@10)

// 或者使用mas_equalto這種時:

make.top.mas_equalto(42);

make.height.mas_equalto(20);

make.size.mas_equalto(cgsizemake(50, 100));

make.edges.mas_equalto(uiedgeinsetsmake(10, 0, 10, 0));

make.left.mas_equalto(view).mas_offset(uiedgeinsetsmake(10, 0, 10, 0));

優先順序

自定義優先順序

// .priority allows you to specify an exact priority  

make.top.equalto(label.mas_left).with.priority(600);

高優先順序

// .priorityhigh equivalent to **uilayoutprioritydefaulthigh**  

make.left.equalto(label.mas_left).with.priorityhigh();

中等優先順序

// .prioritymedium is half way between high and low  

make.left.equalto(label.mas_left).with.prioritymedium();

低優先順序

// .prioritylow equivalent to **uilayoutprioritydefaultlow**

make.left.greaterthanorequalto(label.mas_left).with.prioritylow();

masonry

初識Masonry,總結簡單使用方法

前情 因專案多人開發,決定棄用xib了,所以改用masonry來進行autolayout布局,這裡簡單總結下使用方法。常用方法 label為例 self.titlelabel mas makeconstraints masconstraintmaker make make.left.top.mas ...

遞迴寫法總結

遞迴是演算法中的一種很重要思想。好的遞迴程式邏輯清楚,簡潔,有時候時間上也非常高效 此外鍊錶 二叉樹等結構用遞迴演算法一般都有鮮明優勢。往往遞迴問題口頭說起來感覺十分清晰順暢 而用 實現起來確總感覺層巒疊嶂,不知從何下手,思路也越來越混亂不堪。最近在解決一些演算法相關的小問題時候,經常需要用到遞迴,...

for迴圈寫法總結

for迴圈寫法總結 關於shell中的for迴圈用法很多,感覺很全面,所以就轉過來研究研究,嘿嘿.1 for i 1 i 10 i root fox for i 1 i 3 i do echo i 4 done48 2 在shell中常用的是 for i in seq 10 root fox for...