Masonry簡(jiǎn)單實(shí)用以及布局硬度壓縮UILayoutPriority

一 簡(jiǎn)單參數(shù)的介紹

 >參數(shù)一:(UILayoutPriority)
 >設(shè)置優(yōu)先級(jí)等級(jí),數(shù)值越大霹期,優(yōu)先級(jí)越高叶组。
 >UILayoutPriorityRequired           == 1000;
 >UILayoutPriorityDefaultHigh        == 750历造;
 >UILayoutPriorityDefaultLow         == 250甩十;
 >UILayoutPriorityFittingSizeLevel   == 50船庇;
mas_makeConstraints()    添加約束
mas_remakeConstraints()  移除之前的約束,重新添加新的約束
mas_updateConstraints()  更新約束枣氧,寫哪條更新哪條溢十,其他約束不變

equalTo()       參數(shù)是對(duì)象類型,一般是視圖對(duì)象或者mas_width這樣的坐標(biāo)系對(duì)象
mas_equalTo()   和上面功能相同达吞,參數(shù)可以傳遞基礎(chǔ)數(shù)據(jù)類型對(duì)象张弛,可以理解為比上面的API更強(qiáng)大

width()         用來表示寬度,例如代表view的寬度
mas_width()     用來獲取寬度的值酪劫。和上面的區(qū)別在于吞鸭,一個(gè)代表某個(gè)坐標(biāo)系對(duì)象,一個(gè)用來獲取坐標(biāo)系對(duì)象的值
[_textLabel mas_makeConstraints:^(MASConstraintMaker *make) {
    make.left.equalTo(weakSelf.mas_left);
    make.width.equalTo(weakSelf).multipliedBy(0.01f);//相對(duì)于weakSelf比例進(jìn)行縮放
    make.top.equalTo(weakSelf);
    make.bottom.equalTo(weakSelf.mas_bottom).mas_offset(-10);
}];

二 動(dòng)態(tài)刷新布局簡(jiǎn)單實(shí)用


純代碼約束優(yōu)先級(jí).gif
- (void)viewDidLoad {
    [super viewDidLoad];
    //1.添加三個(gè)View
    UIView *orangeView = [[UIView alloc]init];
    orangeView.backgroundColor = [UIColor orangeColor];
    [self.view addSubview:orangeView];
    self.orangeView = orangeView;
    //2.
    UIView *yellowView = [[UIView alloc]init];
    yellowView.backgroundColor = [UIColor yellowColor];
    [self.view addSubview:yellowView];
    self.yellowView = yellowView;
    //3.
    UIView *greenView = [[UIView alloc]init];
    greenView.backgroundColor = [UIColor greenColor];
    [self.view addSubview:greenView];
    self.greenView = greenView;

//配置約束
    [self setUpRestrain];
}

//配置約束
-(void)setUpRestrain
{
     __weak typeof( self) weakSelf = self;

//對(duì)于橙色View只需正常設(shè)置約束就好
  [self.orangeView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.width.height.mas_equalTo(100);
        make.left.offset(10);
        make.top.offset(50);
    }];
//黃色View只會(huì)發(fā)生一次變化覆糟,就多設(shè)一個(gè)優(yōu)先級(jí)較低的約束就好  
  [self.yellowView mas_makeConstraints:^(MASConstraintMaker *make) {
         make.width.height.mas_equalTo(100);
        make.left.equalTo(weakSelf.orangeView.mas_right).offset(20);
        make.top.offset(50);
 //當(dāng)橙色View消失后,黃色View缺少左邊約束刻剥,所以給其加一個(gè)優(yōu)先級(jí)更低的左邊約束。當(dāng)?shù)谝粋€(gè)左邊約束失效后滩字,這個(gè)約束就起作用了
       make.left.equalTo(weakSelf.view.mas_left).offset(20).priority(300);

 }];
//同理綠色View的低級(jí)約束就得設(shè)置兩個(gè)   
 [self.greenView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.width.height.mas_equalTo(100);
        make.left.equalTo(weakSelf.yellowView.mas_right).offset(20);
        make.top.offset(50);
       make.left.equalTo(weakSelf.orangeView.mas_right).offset(20).priority(300);
        make.left.equalTo(weakSelf.view.mas_left).offset(20).priority(250);
    }];
}

//刪除黃色View
- (IBAction)cancelYellowBtn:(id)sender {
//這里有個(gè)知識(shí)點(diǎn):用約束布局實(shí)現(xiàn)動(dòng)畫造虏,布局代碼寫在外面,然后調(diào)用強(qiáng)制布局方法寫在UIView動(dòng)畫里面
    [self.yellowView removeFromSuperview];
    [UIView animateWithDuration:0.5 animations:^{
      //強(qiáng)制刷新布局
        [self.view layoutIfNeeded];
    }];

}
//刪除橙色View
- (IBAction)cancelGreenBtn:(id)sender {
    [self.orangeView removeFromSuperview];
    [UIView animateWithDuration:0.5 animations:^{
        //強(qiáng)制刷新布局
        [self.view layoutIfNeeded];

    }];
}

三 硬度的簡(jiǎn)單實(shí)用
最近在使用Masonry時(shí)出現(xiàn)一個(gè)布局問題麦箍,如下圖:


1707114-687f0017c5d25623.png

正常顯示:


1707114-fc6cc0052f899a50.png

布局需求是漓藕,最左側(cè)頭像完整顯示,姓名完整顯示挟裂,性別和年領(lǐng)完整顯示享钞,病名緊貼右側(cè),左側(cè)不能遮擋年齡诀蓉,病名過長(zhǎng)可以不顯示完全栗竖。

開始有問題的布局代碼:

[self.headImageView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.contentView).offset(12.5);
        make.size.mas_equalTo(CGSizeMake(45, 45));
        make.centerY.equalTo(self.contentView);
    }];
    
    [self.lbPatientName mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.headImageView.mas_right).with.offset(7);
        make.top.equalTo(self.headImageView).with.offset(2.5);
    }];
    
    [self.lbPatientAge mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.lbPatientName.mas_right).offset(10);
        make.centerY.equalTo(self.lbPatientName);
    }];
    
    [self.btnIllDiagnose mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.equalTo(self.lbPatientName);
        make.right.equalTo(self.contentView).offset(-15);
        make.left.greaterThanOrEqualTo(self.lbPatientAge.mas_right).offset(3);
    }];

這樣布局的話當(dāng)病名過長(zhǎng)時(shí),會(huì)出現(xiàn)性別年齡被遮擋的情況渠啤,如上圖一狐肢。

解決辦法:

因?yàn)槲覀儧]有給姓名、病名和性別年齡設(shè)定固定寬度沥曹,所以系統(tǒng)在自動(dòng)布局的時(shí)候并不知道哪個(gè)應(yīng)該被完整顯示份名,哪個(gè)可以不完整顯示。所以我們要給控件設(shè)置布局優(yōu)先級(jí):
修改后代碼如下:

[self.headImageView mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.contentView).offset(12.5);
        make.size.mas_equalTo(CGSizeMake(45, 45));
        make.centerY.equalTo(self.contentView);
    }];
    
    [self.lbPatientName mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.headImageView.mas_right).with.offset(7);
        make.top.equalTo(self.headImageView).with.offset(2.5);
    }];
    
    [self.lbPatientAge mas_makeConstraints:^(MASConstraintMaker *make) {
        make.left.equalTo(self.lbPatientName.mas_right).offset(10);
        make.centerY.equalTo(self.lbPatientName);
    }];
    
    [self.btnIllDiagnose mas_makeConstraints:^(MASConstraintMaker *make) {
        make.centerY.equalTo(self.lbPatientName);
        make.right.equalTo(self.contentView).offset(-15);
        make.left.greaterThanOrEqualTo(self.lbPatientAge.mas_right).offset(3);
    }];
// 設(shè)置優(yōu)先級(jí)
    
    [self.lbPatientName setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisHorizontal];
    
    [self.lbPatientAge setContentCompressionResistancePriority:UILayoutPriorityDefaultHigh forAxis:UILayoutConstraintAxisHorizontal];

    [self.btnIllDiagnose setContentCompressionResistancePriority:UILayoutPriorityDefaultLow forAxis:UILayoutConstraintAxisHorizontal];

設(shè)置優(yōu)先級(jí)方法:

  • (void)setContentCompressionResistancePriority:(UILayoutPriority)priority forAxis:(UILayoutConstraintAxis)axis NS_AVAILABLE_IOS(6_0);

第一個(gè)參數(shù)(priority):通俗來講架专,不同的優(yōu)先級(jí)同窘,表示顯示的完整性的高低玄帕,優(yōu)先級(jí)越高部脚,那么在父控件無(wú)法在無(wú)越界的情況下的情況下,就會(huì)優(yōu)先先把優(yōu)先級(jí)高的控件顯示完整裤纹,然后再依次顯示優(yōu)先級(jí)低的
第二個(gè)參數(shù)(axis):代表在什么方向上進(jìn)行優(yōu)先級(jí)限制

這樣顯示就正常了:

1707114-50cea9df8cd32d0c.png
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末委刘,一起剝皮案震驚了整個(gè)濱河市丧没,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌锡移,老刑警劉巖呕童,帶你破解...
    沈念sama閱讀 211,348評(píng)論 6 491
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異淆珊,居然都是意外死亡夺饲,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,122評(píng)論 2 385
  • 文/潘曉璐 我一進(jìn)店門施符,熙熙樓的掌柜王于貴愁眉苦臉地迎上來往声,“玉大人,你說我怎么就攤上這事戳吝『葡” “怎么了?”我有些...
    開封第一講書人閱讀 156,936評(píng)論 0 347
  • 文/不壞的土叔 我叫張陵听哭,是天一觀的道長(zhǎng)慢洋。 經(jīng)常有香客問我,道長(zhǎng)陆盘,這世上最難降的妖魔是什么普筹? 我笑而不...
    開封第一講書人閱讀 56,427評(píng)論 1 283
  • 正文 為了忘掉前任,我火速辦了婚禮礁遣,結(jié)果婚禮上斑芜,老公的妹妹穿的比我還像新娘。我一直安慰自己祟霍,他們只是感情好杏头,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,467評(píng)論 6 385
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著沸呐,像睡著了一般醇王。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上崭添,一...
    開封第一講書人閱讀 49,785評(píng)論 1 290
  • 那天寓娩,我揣著相機(jī)與錄音,去河邊找鬼呼渣。 笑死棘伴,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的屁置。 我是一名探鬼主播焊夸,決...
    沈念sama閱讀 38,931評(píng)論 3 406
  • 文/蒼蘭香墨 我猛地睜開眼,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼蓝角!你這毒婦竟也來了阱穗?” 一聲冷哼從身側(cè)響起饭冬,我...
    開封第一講書人閱讀 37,696評(píng)論 0 266
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎揪阶,沒想到半個(gè)月后昌抠,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 44,141評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡鲁僚,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,483評(píng)論 2 327
  • 正文 我和宋清朗相戀三年炊苫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片冰沙。...
    茶點(diǎn)故事閱讀 38,625評(píng)論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡劝评,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出倦淀,到底是詐尸還是另有隱情蒋畜,我是刑警寧澤,帶...
    沈念sama閱讀 34,291評(píng)論 4 329
  • 正文 年R本政府宣布撞叽,位于F島的核電站姻成,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏愿棋。R本人自食惡果不足惜科展,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,892評(píng)論 3 312
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望糠雨。 院中可真熱鬧才睹,春花似錦、人聲如沸甘邀。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,741評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)松邪。三九已至坞琴,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間逗抑,已是汗流浹背剧辐。 一陣腳步聲響...
    開封第一講書人閱讀 31,977評(píng)論 1 265
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留邮府,地道東北人荧关。 一個(gè)月前我還...
    沈念sama閱讀 46,324評(píng)論 2 360
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像褂傀,于是被迫代替她去往敵國(guó)和親忍啤。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,492評(píng)論 2 348

推薦閱讀更多精彩內(nèi)容