Masonry API 詳解

Masonry 基本用法
添加:mas_makeConstraints()-添加約束
更新:mas_updateConstraints()-更新約束
刪除:mas_remakeConstraints()-有些時候修改約束沒有用就用這個
----------
距左:make.left.equalTo(self.view).with.offset(10);
距右:make.right.equalTo(self.view).with.offset(-10);
距上:make.top.equalTo(self.view).with.offset(10);
距下:make.bottom.equalTo(self.view).with.offset(-10);
居中:make.center.equalTo(self.view)
總合:make.edges.equalTo(superview).insets(UIEdgeInsetsMake(5, 10, 15, 20))
垂直居中:make.centerY.equalTo(self.view)
水平居中:make.centerX.equalTo(self.view)
width() 和 mas_width()區(qū)別焰轻?
width():用來表示寬度乞旦,例如代表view的寬度
mas_width():用來獲取寬度的值愈涩。和上面的區(qū)別在于捧灰,一個代表某個坐標(biāo)系對象喳钟,一個用來獲取坐標(biāo)系對象的值
mas_equalTo和equalTo區(qū)別律想?

mas_equalTo 比equalTo多了類型轉(zhuǎn)換操作,一般來說殴蹄,大多數(shù)時候兩個方法都是通用的究抓,但是對于數(shù)值元素使用mas_equalTo猾担。對于對象或是多個屬性的處理袭灯,使用equalTo刺下。特別是多個屬性時,必須使用equalTo,例如 make.left.and.right.equalTo(self.view);

修正
  • offset(位移)修正
  • multipliedBy(倍率)修正
比例
-*寬是父視圖的 1:3
make.width.mas_equalTo(superView).multipliedBy(1.00/3);
-*高是父視圖的 1:4
make.height.mas_equalTo(superView).multipliedBy(0.25);
寬高合并寫法
-*寬
make.width.mas_equalTo(60);
-*高
make.height.mas_equalTo(60);
-*總合
make.size.mas_equalTo(CGSizeMake(50, 100));
取值范圍
-*大于等于
greaterThanOrEqualTo();
-*小于等于
lessThanOrEqualTo();
-*為寬(高)設(shè)置范圍例如:200 ≤ width ≤ 400
make.width.greaterThanOrEqualTo(@200);
make.width.lessThanOrEqualTo(@400);
優(yōu)先級
priority -允許你設(shè)置一個非常準(zhǔn)確的的約束優(yōu)先級(0-1000)值越大優(yōu)先級越高
make.left.mas_equalTo(20).priority(700);
priorityHigh   -高
priorityMedium -中
priorityLow    -低
不想添加mas_前綴稽荧,還想使用常量值設(shè)置約束

需要在導(dǎo)入Masonry頭文件前橘茉,設(shè)置宏定義MAS_SHORTHAND_GLOBALS,至于為什么姨丈,去Masonry代碼中搜索一下MAS_SHORTHAND_GLOBALS便知畅卓。

等寬、等間距布局view

等寬蟋恬、等間距布局view
//.等寬翁潘、等間距布局view
UIView *view1 = [[UIView alloc] init];
view1.backgroundColor = [UIColor blueColor];
[self.view addSubview:view1];

UIView *view2 = [[UIView alloc] init];
view2.backgroundColor = [UIColor redColor];
[self.view addSubview:view2];

UIView *view3 = [[UIView alloc] init];
view3.backgroundColor = [UIColor greenColor];
[self.view addSubview:view3];
self.array = @[view1,view2,view3];

//橫向
- (void)getHorizontalone
{
    //方法一,array 的 mas_distributeViewsAlongAxis
    /**
     *  多個控件固定間隔的等間隔排列,變化的是控件的長度或者寬度值
     *
     *  @param axisType        軸線方向
     *  @param fixedSpacing    間隔大小
     *  @param leadSpacing     頭部間隔
     *  @param tailSpacing     尾部間隔
     */
    //    MASAxisTypeHorizontal  水平
    //    MASAxisTypeVertical    垂直
    
    [self.array mas_distributeViewsAlongAxis:MASAxisTypeHorizontal
                           withFixedSpacing:5
                                leadSpacing:5
                                tailSpacing:5];
    [self.array mas_makeConstraints:^(MASConstraintMaker *make) {
        make.top.mas_equalTo(60);//設(shè)置距離頂部的約束
        make.height.mas_offset(100);//設(shè)置高
    }];
}
設(shè)置寬度間距動態(tài)
設(shè)置寬度間距動態(tài)效果圖
//在紅色View里面放三個正方形藍(lán)色View, 寬度均為30, 間隙一樣大
    NSMutableArray *blueViews = [NSMutableArray array];
    for (NSInteger i = 0; i < 3; i++) {
        UIView *blueView = [[UIView alloc] init];
        blueView.backgroundColor = [UIColor blueColor];
        [redView addSubview:blueView];
        [blueViews addObject:blueView];
    }
    CGFloat padding2 = (300 - 3 * 30) / 4;
    [blueViews mas_distributeViewsAlongAxis:MASAxisTypeHorizontal withFixedItemLength:30 leadSpacing:padding2 tailSpacing:padding2];
    [blueViews mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.equalTo(redView);
        UIView *blueView = (UIView *)blueViews[0];
        make.height.mas_equalTo(blueView.mas_width);
    }];
等間距但寬度不同
等間距但寬度不同
//在紅色View里面放三個大小不一樣的綠色正方形, 間隙等大, masonry并沒提供相關(guān)方法
    NSMutableArray *greenViews = [NSMutableArray array];
    for (NSInteger i = 0; i < 3; i++) {
        UIView *greenView = [[UIView alloc] init];
        greenView.backgroundColor = [UIColor greenColor];
        [redView addSubview:greenView];
        [greenViews addObject:greenView];
        [greenView mas_makeConstraints:^(MASConstraintMaker *make) {
            make.bottom.equalTo(redView).offset(-10);
            make.width.mas_equalTo(i*20 + 20);
            make.height.mas_equalTo(greenView.mas_width);
        }];
    }
    [redView distributeSpacingHorizontallyWith:greenViews];![1570070848-5b02319e39712_articlex.png](https://upload-images.jianshu.io/upload_images/305755-3f8844cd93cdc72f.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

Masonry 注意事項
  • 使用mas_makeConstraints方法的元素必須事先添加到父元素中歼争,例如[self.view addSubview:view];
  • 注意 withwidth 不要寫混拜马,報錯不易查找
  • withand方法其實沒有做任何操作,方法只是返回對象本身沐绒,這兩個方法的左右完全是為了方法寫的時候的可讀性 俩莽。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市乔遮,隨后出現(xiàn)的幾起案子扮超,更是在濱河造成了極大的恐慌,老刑警劉巖蹋肮,帶你破解...
    沈念sama閱讀 219,270評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件出刷,死亡現(xiàn)場離奇詭異,居然都是意外死亡坯辩,警方通過查閱死者的電腦和手機(jī)巷蚪,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,489評論 3 395
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來濒翻,“玉大人屁柏,你說我怎么就攤上這事∮兴停” “怎么了淌喻?”我有些...
    開封第一講書人閱讀 165,630評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長雀摘。 經(jīng)常有香客問我裸删,道長,這世上最難降的妖魔是什么阵赠? 我笑而不...
    開封第一講書人閱讀 58,906評論 1 295
  • 正文 為了忘掉前任涯塔,我火速辦了婚禮肌稻,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘匕荸。我一直安慰自己爹谭,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,928評論 6 392
  • 文/花漫 我一把揭開白布榛搔。 她就那樣靜靜地躺著诺凡,像睡著了一般。 火紅的嫁衣襯著肌膚如雪践惑。 梳的紋絲不亂的頭發(fā)上腹泌,一...
    開封第一講書人閱讀 51,718評論 1 305
  • 那天,我揣著相機(jī)與錄音尔觉,去河邊找鬼凉袱。 笑死,一個胖子當(dāng)著我的面吹牛侦铜,可吹牛的內(nèi)容都是我干的专甩。 我是一名探鬼主播,決...
    沈念sama閱讀 40,442評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼泵额,長吁一口氣:“原來是場噩夢啊……” “哼配深!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起嫁盲,我...
    開封第一講書人閱讀 39,345評論 0 276
  • 序言:老撾萬榮一對情侶失蹤篓叶,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后羞秤,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體缸托,經(jīng)...
    沈念sama閱讀 45,802評論 1 317
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,984評論 3 337
  • 正文 我和宋清朗相戀三年瘾蛋,在試婚紗的時候發(fā)現(xiàn)自己被綠了俐镐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 40,117評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡哺哼,死狀恐怖佩抹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情取董,我是刑警寧澤棍苹,帶...
    沈念sama閱讀 35,810評論 5 346
  • 正文 年R本政府宣布,位于F島的核電站茵汰,受9級特大地震影響枢里,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,462評論 3 331
  • 文/蒙蒙 一栏豺、第九天 我趴在偏房一處隱蔽的房頂上張望彬碱。 院中可真熱鬧,春花似錦奥洼、人聲如沸巷疼。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,011評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽皮迟。三九已至搬泥,卻和暖如春桑寨,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背忿檩。 一陣腳步聲響...
    開封第一講書人閱讀 33,139評論 1 272
  • 我被黑心中介騙來泰國打工尉尾, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人燥透。 一個月前我還...
    沈念sama閱讀 48,377評論 3 373
  • 正文 我出身青樓沙咏,卻偏偏與公主長得像,于是被迫代替她去往敵國和親班套。 傳聞我的和親對象是個殘疾皇子肢藐,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,060評論 2 355