亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS App開發中Masonry布局框架的基本用法解析

2020-07-26 03:25:32
字體:
來源:轉載
供稿:網友

Masonry是一個輕量級的布局框架,擁有自己的描述語法,采用更優雅的鏈式語法封裝自動布局,簡潔明了并具有高可讀性,而且同時支持 iOS 和 Max OS X。Masonry是一個用代碼寫iOS或OS界面的庫,可以代替Auto layout。Masonry的github地址:https://github.com/SnapKit/Masonry

Masonry使用講解:

mas_makeConstraints 是給view添加約束,約束有幾種,分別是邊距,寬,高,左上右下距離,基準線。添加過約束后可以有修正,修正有offset(位移)修正和multipliedBy(倍率)修正。

語法一般是 make.equalTo or make.greaterThanOrEqualTo or make.lessThanOrEqualTo + 倍數和位移修正。

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

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

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

下面帶著例子來看一下基礎用法,假設我們現在的需求是:

1.我們現在只能確定我們控件的寬高以及左右的邊距,需要對上下進行自動適應。
2.假設我們現在有四個控件,需要布局的界面是這個樣子的

豎屏效果:

201631991509026.jpg (459×773)

橫屏效果:

201631991533698.jpg (751×481)

第一步:在我們的控制器中導入Masonry所需要的文件

復制代碼 代碼如下:

#define MAS_SHORTHAND
#define MAS_SHORTHAND_GLOBALS
#import "Masonry.h"

第二步:在控制器中添加以下三個占位視圖并設置顏色
復制代碼 代碼如下:

    //上面的占位視圖
    UIView *topView = UIView.new;
    topView.backgroundColor = [UIColor redColor];
    [self.view addSubview:topView];
    //中間的占位視圖
    UIView *centerView = UIView.new;
    centerView.backgroundColor = [UIColor grayColor];
    [self.view addSubview:centerView];
    //下面的占位視圖
    UIView *bottomView = UIView.new;
    bottomView.backgroundColor = [UIColor blackColor];
    [self.view addSubview:bottomView];

第三步:開始分別給三個占位視圖添加約束
復制代碼 代碼如下:

    //給上面的占位視圖添加約束
    [topView makeConstraints:^(MASConstraintMaker *make) {       //頭部及左邊距分別為0
        make.top.left.equalTo(self.view).offset(0);
        //三個占位視圖的高度等高
        make.height.equalTo(@[centerView,bottomView]);
        //設置top視圖的高度
        make.width.equalTo(100);
    }];
    //中間視圖的需要添加以下約束,高度、左邊以及與上方占位視圖的關系
     [centerView makeConstraints:^(MASConstraintMaker *make) {
        //左邊的約束
        make.left.equalTo(self.view).offset(0);
        //設置三個占位視圖等高
        make.width.equalTo(@[topView,bottomView]);
        //設置中間占位視圖與上方視圖的關聯約束
        make.top.equalTo(topView.bottom).offset(150);

    }];
    //下面的約束主要設置下面的與中間視圖的約束以及本身左邊距的約束
    [bottomView makeConstraints:^(MASConstraintMaker *make) {
        make.left.bottom.equalTo(self.view).offset(0);
        make.top.equalTo(centerView.bottom).offset(150);

    }];


到了,這里。我們的三個占位視圖已經基本完成了。那么讓我們運行一下看下效果:

201631991554091.png (369×666)

由此我們發現中間空出的部分正好就是我們控件所需的位置了,那么下面我們就開始進行對控件的布局了。首先還是添加需要的左邊的控件

復制代碼 代碼如下:

     UIImageView *imageView1 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"a"]];
    [self.view addSubview:imageView1];
    UIImageView *imageView2 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"b"]];
    [self.view addSubview:imageView2];

    //然后對這兩個控件進行布局

    [imageView1 makeConstraints:^(MASConstraintMaker *make) {
        //分別設置起寬高
       make.width.height.equalTo(150);
        //左邊的邊距
       make.left.equalTo(self.view).offset(0);
       //設置其與上面占位視圖和下面占位視圖的間距
       make.top.equalTo(topView.bottom).offset(0);
       make.bottom.equalTo(centerView.top).offset(0);
    //控件2同上。
    [imageView2 makeConstraints:^(MASConstraintMaker *make) {
        make.width.height.equalTo(150);
        make.left.equalTo(self.view).offset(0);
        make.top.equalTo(centerView.bottom).offset(0);
        make.bottom.equalTo(bottomView.top).offset(0);

    }];


代碼到了這里左邊的控件約束基本布局完成了,讓我們來看一下運行的效果吧。

201631991611343.png (374×666)

到了這里我們就可以對右邊的控件進行布局了?;谥暗慕涷炍覀兙蜁l現右邊的約束只需要添加本身的寬、高和右邊邊距以及基于左邊控件的centerY值就足夠了。好了,我們開始吧。

復制代碼 代碼如下:

    UIImageView *imageView3 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"a"]];
    [self.view addSubview:imageView3];
    UIImageView *imageView4 = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"b"]];
    [self.view addSubview:imageView4];

    //該控件與左邊的控件的關聯
    [imageView3 makeConstraints:^(MASConstraintMaker *make) {
        make.width.height.equalTo(150);
        make.right.equalTo(self.view).offset(0);
        make.centerY.equalTo(imageView1);

    }];
    //同上
    [imageView4 makeConstraints:^(MASConstraintMaker *make) {
        make.width.height.equalTo(150);
        make.right.equalTo(self.view).offset(0);
        make.centerY.equalTo(imageView2);

    }];


到了這里基本上是大功告成了,到了這里只需要要把三個占位視圖的背景顏色設置為透明就好了。
復制代碼 代碼如下:

    //另外兩個也是
  bottomView.backgroundColor = [UIColor clearColor];

運行效果如圖:

201631991629336.gif (445×457)

到了這里我們基本上就把基本的占位視圖的介紹了聯系完了。通過聯系你可能會發現,無論是在StoryBoary上添加約束還是通過編碼進行的智能布局都是基于對父控件或者對其他控件進行的關聯。當然了如果你對AutoLayout的編碼布局的話就可能就會覺得Masonry真的是好用的爆了。當然了,這么強大的Masonry,提供的功能也是很多的,這些就要靠大家來探索了,嘿嘿。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
久久精品影视伊人网| 精品久久久久久久久久| 国产精品第2页| 91在线视频九色| 在线视频欧美日韩精品| 国产一区二区三区直播精品电影| 欧美第一淫aaasss性| 美女黄色丝袜一区| 国产精品盗摄久久久| 欧美精品免费在线观看| 国产精品电影久久久久电影网| 精品一区二区三区三区| 亚洲a一级视频| 国产美女91呻吟求| 国产亚洲欧美日韩精品| 久久久久久中文字幕| 日韩中文第一页| 日韩精品在线视频| 日韩精品中文字幕在线播放| 日韩av手机在线看| 国内精品久久久| 91久久久久久久久久久久久| 在线精品视频视频中文字幕| 日韩女在线观看| 北条麻妃一区二区三区中文字幕| 91视频8mav| 日韩三级成人av网| 一本色道久久综合亚洲精品小说| 2021久久精品国产99国产精品| 日韩免费av一区二区| 欧美成人精品影院| 美女扒开尿口让男人操亚洲视频网站| 久久中国妇女中文字幕| 久久久久久噜噜噜久久久精品| 欧美亚洲一区在线| 久久久久久97| 欧美色播在线播放| 久久久国产精品视频| 欧美激情aaaa| 欧美亚洲成人精品| 国产精品久久91| 欧美激情精品久久久久久久变态| 久久综合伊人77777蜜臀| 精品成人久久av| 久久精品小视频| 欧美成人合集magnet| 成人精品aaaa网站| 久久久久久999| 亚洲乱亚洲乱妇无码| 国产一区二区黑人欧美xxxx| 欧美专区第一页| 国产综合在线观看视频| 98精品国产自产在线观看| 欧美巨猛xxxx猛交黑人97人| 国产一区二中文字幕在线看| 俺也去精品视频在线观看| 日韩精品亚洲视频| 韩国福利视频一区| 国内揄拍国内精品少妇国语| 国产拍精品一二三| 欧美精品在线免费播放| 清纯唯美亚洲激情| 久久久噜噜噜久久久| 欧美亚洲国产日韩2020| 一区二区亚洲欧洲国产日韩| 欧美电影在线观看完整版| 亚洲国产一区自拍| 欧美激情国产高清| 久色乳综合思思在线视频| 日韩在线免费高清视频| 欧美在线视频网站| 亚洲美腿欧美激情另类| 亚洲一区二区中文| 国产精品手机播放| 国产精品极品在线| 成人免费福利在线| 欧美另类暴力丝袜| 欧美激情精品久久久久| 亚洲一区av在线播放| 中文日韩电影网站| 最近2019中文字幕mv免费看| 日本欧美一二三区| 亚洲欧美日韩综合| 欧美丝袜美女中出在线| 久久精品免费电影| 亚洲黄色有码视频| 中文字幕亚洲自拍| 国产在线98福利播放视频| 69av成年福利视频| 成人午夜一级二级三级| 尤物九九久久国产精品的特点| 亚洲91精品在线观看| 日本一区二区在线免费播放| 欧美洲成人男女午夜视频| 精品国内亚洲在观看18黄| 国产免费一区二区三区香蕉精| 欧美成人免费播放| 国产精品美女无圣光视频| 久久精品国产亚洲| 欧美日韩成人在线视频| 亚洲中国色老太| 欧美在线视频观看免费网站| 亚洲欧美制服综合另类| 久久久精品网站| 欧美午夜精品在线| 国产精品视频yy9099| 性欧美长视频免费观看不卡| 欧美日本啪啪无遮挡网站| 国产丝袜视频一区| 亚洲自拍在线观看| 日本精品中文字幕| 91日本在线观看| 亚洲片国产一区一级在线观看| 久久精品久久久久久国产 免费| 国产在线不卡精品| 成人黄色短视频在线观看| 亚洲欧洲美洲在线综合| 日韩av电影在线免费播放| 久久久久日韩精品久久久男男| 欧美视频裸体精品| 国产97在线播放| 国产精品久久久久久亚洲影视| 精品女同一区二区三区在线播放| 欧美一级视频在线观看| 欧美另类老肥妇| 午夜精品久久久久久久男人的天堂| 2019中文字幕在线免费观看| 国产精品视频最多的网站| 国产亚洲欧美视频| 亚洲国产三级网| 欧美激情视频在线免费观看 欧美视频免费一| 亚洲欧美日本精品| 久久精品视频在线播放| xxx成人少妇69| 国产成人精品综合| 高潮白浆女日韩av免费看| 欧美怡红院视频一区二区三区| 亚洲午夜未满十八勿入免费观看全集| 色播久久人人爽人人爽人人片视av| 欧美成人免费va影院高清| 日韩的一区二区| 国产一区二区在线播放| 亚洲国产成人av在线| 欧美日本国产在线| 久久69精品久久久久久久电影好| 成人精品福利视频| 日韩经典一区二区三区| 国产精品精品一区二区三区午夜版| 国内揄拍国内精品| 久久久久久亚洲精品不卡| 精品国偷自产在线视频99| 国产精品极品在线| 91久久精品视频| 欧美大片欧美激情性色a∨久久| 国产mv免费观看入口亚洲| 日韩精品中文字幕在线| 日韩在线一区二区三区免费视频| 欧美黑人一级爽快片淫片高清| 亚洲精品资源在线| 97香蕉超级碰碰久久免费软件| 国产精品国产福利国产秒拍| 日韩在线视频导航| 欧美日韩在线视频一区二区| 成人在线观看视频网站|