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

首頁 > 系統 > iOS > 正文

IOS自適配利器Masonry使用指南

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

關于iOS布局自動iPhone6之后就是AutoLayOut,AutoLayOut固然非常好用,不過有時候我們需要在頁面手動進行頁面布局,VFL算是一種選擇,而且VFL不復雜,理解起來很容易,實際開發中用的特別熟還好,要是第一次看估計要花點功夫才能搞定。Masonry算是VFL的簡化版,用的人比較多,之前項目中用過一次,對手動寫頁面的開發來說算是福利。

基礎知識

首先我們看一個常見的問題將一個子View放在的UIViewController的某個位置,通過設置邊距來實現,效果如下:

如果通過VFL我們代碼會是這樣的:

UIView *superview                               = self.view; UIView *view1                                   = [[UIView alloc] init];view1.translatesAutoresizingMaskIntoConstraints = NO;view1.backgroundColor                           = [UIColor redColor];[superview addSubview:view1]; UIEdgeInsets padding                            = UIEdgeInsetsMake(200, 50, 200, 50); [superview addConstraints:@[                             //約束                            [NSLayoutConstraint constraintWithItem:view1                                                         attribute:NSLayoutAttributeTop                                                         relatedBy:NSLayoutRelationEqual                                                            toItem:superview                                                         attribute:NSLayoutAttributeTop                                                        multiplier:1.0                                                          constant:padding.top],                             [NSLayoutConstraint constraintWithItem:view1                                                         attribute:NSLayoutAttributeLeft                                                         relatedBy:NSLayoutRelationEqual                                                            toItem:superview                                                         attribute:NSLayoutAttributeLeft                                                        multiplier:1.0                                                          constant:padding.left],                             [NSLayoutConstraint constraintWithItem:view1                                                         attribute:NSLayoutAttributeBottom                                                         relatedBy:NSLayoutRelationEqual                                                            toItem:superview                                                         attribute:NSLayoutAttributeBottom                                                        multiplier:1.0                                                          constant:-padding.bottom],                             [NSLayoutConstraint constraintWithItem:view1                                                         attribute:NSLayoutAttributeRight                                                         relatedBy:NSLayoutRelationEqual                                                            toItem:superview                                                         attribute:NSLayoutAttributeRight                                                        multiplier:1                                                          constant:-padding.right],                             ]];

只是簡單的設置了一個邊距,如果視圖的關系比較復雜,維護起來會是一個很痛苦的事情,我們看一下Masonry是如何實現的,導入Masonry.h頭文件,約束的代碼:

UIView  *childView=[UIView new];[childView setBackgroundColor:[UIColor redColor]];//先將子View加入在父視圖中[self.view addSubview:childView];__weak typeof(self) weakSelf = self;UIEdgeInsets padding = UIEdgeInsetsMake(200, 50, 200, 50);[childView mas_makeConstraints:^(MASConstraintMaker *make) {    make.edges.equalTo(weakSelf.view).with.insets(padding);}];

通過mas_makeConstraints設置邊距有種鳥槍換炮的感覺,我們即將開啟一段新的旅程,可以緊接著看下面比較實用的功能~

實用知識

1.View設置大小

UIView  *childView=[UIView new];[childView setBackgroundColor:[UIColor redColor]];//先將子View加入在父視圖中[self.view addSubview:childView];__weak typeof(self) weakSelf = self;[childView mas_makeConstraints:^(MASConstraintMaker *make) {    //設置大小    make.size.mas_equalTo(CGSizeMake(100, 100));    //居中    make.center.equalTo(weakSelf.view);}];

效果如下:

  

這里友情其實一個小內容,目前我們設置約束都是通過mas_makeConstraints用來創建約束,mas_updateConstraints用來更新約束,mas_remakeConstraints重置約束,清除之前的約束,保留最新的約束,如果想深入解釋下,可以閱讀下面的英文解釋~

/** *  Creates a MASConstraintMaker with the callee view. *  Any constraints defined are added to the view or the appropriate superview once the block has finished executing * *  @param block scope within which you can build up the constraints which you wish to apply to the view. * *  @return Array of created MASConstraints */- (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block; /** *  Creates a MASConstraintMaker with the callee view. *  Any constraints defined are added to the view or the appropriate superview once the block has finished executing. *  If an existing constraint exists then it will be updated instead. * *  @param block scope within which you can build up the constraints which you wish to apply to the view. * *  @return Array of created/updated MASConstraints */- (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block; /** *  Creates a MASConstraintMaker with the callee view. *  Any constraints defined are added to the view or the appropriate superview once the block has finished executing. *  All constraints previously installed for the view will be removed. * *  @param block scope within which you can build up the constraints which you wish to apply to the view. * *  @return Array of created/updated MASConstraints */- (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block;

2.設置高度,這里設置左右邊距,因此不設置寬度,如果想單獨設置width可參考高度的設置方式:

UIView  *childView=[UIView new];[childView setBackgroundColor:[UIColor greenColor]];//先將子View加入在父視圖中[self.view addSubview:childView];__weak typeof(self) weakSelf = self;[childView mas_makeConstraints:^(MASConstraintMaker *make) {    //距離頂部44    make.top.equalTo(weakSelf.view.mas_top).with.offset(44);    //距離左邊30    make.left.equalTo(weakSelf.view.mas_left).with.offset(30);    //距離右邊30,注意是負數    make.right.equalTo(weakSelf.view.mas_right).with.offset(-30);    //高度150    make.height.mas_equalTo(@150);}];

3.子視圖之間的位置設置:

UIView  *childView=[UIView new];[childView setBackgroundColor:[UIColor greenColor]];//先將子View加入在父視圖中[self.view addSubview:childView];__weak typeof(self) weakSelf = self;[childView mas_makeConstraints:^(MASConstraintMaker *make) {    //距離頂部44    make.top.equalTo(weakSelf.view.mas_top).with.offset(44);    //距離左邊30    make.left.equalTo(weakSelf.view.mas_left).with.offset(30);    //距離右邊30,注意是負數    make.right.equalTo(weakSelf.view.mas_right).with.offset(-30);    //高度150    make.height.mas_equalTo(@150);}];//地址:http://www.cnblogs.com/xiaofeixiang/UIView *nextView=[UIView new];[nextView setBackgroundColor:[UIColor redColor]];[self.view addSubview:nextView];[nextView mas_makeConstraints:^(MASConstraintMaker *make) {    make.top.equalTo(childView.mas_bottom).with.offset(30);    make.right.equalTo(childView.mas_right).with.offset(-30);    make.width.mas_equalTo(@100);    make.height.mas_equalTo(@100);}];

4.鏈式寫法,算是一個便利的寫法:

    UIView  *childView=[UIView new];    [childView setBackgroundColor:[UIColor greenColor]];    //先將子View加入在父視圖中    [self.view addSubview:childView];    __weak typeof(self) weakSelf = self;    [childView mas_makeConstraints:^(MASConstraintMaker *make) {        make.top.and.left.mas_equalTo(weakSelf.view).with.offset(100);        make.bottom.and.right.mas_equalTo(weakSelf.view).with.offset(-100);        //第二種寫法更簡單,相對于就是父視圖//        make.top.and.left.mas_equalTo(100);//        make.bottom.and.right.mas_equalTo(-100);    }];         UILabel *label=[UILabel new];    [label setText:@"博客園-FlyElephant"];    [label setTextColor:[UIColor redColor]];    [label setTextAlignment:NSTextAlignmentCenter];    [self.view addSubview:label];    [label mas_makeConstraints:^(MASConstraintMaker *make) {        make.left.mas_equalTo(weakSelf.view).with.offset(10);        make.height.mas_equalTo(20);        make.right.mas_equalTo(weakSelf.view).with.offset(-10);        make.bottom.mas_equalTo(weakSelf.view).with.offset(-50);    }];

 網上關于Masonry的教程很多,給的例子的也很多,這幾種情況基本上滿足了開發中的需求,不會有太多的出入,算是一個簡易版的教程,Masonry的中屬性和iOS中的屬性是有對應的關系,不過因為很簡單,基本上沒怎么看,下圖是一個對照關系:

總結:

  1. 可以給控件添加left/right/top/bottom/size/height/width/insert約束;
  2. 庫提供了三個方法,mas_makeConstraints添加約束,mas_updateConstraints修改約束,mas_remakeConstraints清除以前約束并添加新約束;
  3. 可以通過view.mas_bottom獲得view的某個約束;
  4. 在約束的block中,使用make來給當前控件添加約束。
發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
国产精品欧美日韩一区二区| 国产精品久久久久久av下载红粉| 成人欧美在线观看| 国产精品va在线播放我和闺蜜| 精品亚洲夜色av98在线观看| 欧美高跟鞋交xxxxxhd| 欧美在线视频观看| 成人中文字幕在线观看| 日韩黄在线观看| 日本人成精品视频在线| 一本一本久久a久久精品综合小说| 国产97色在线|日韩| 欧美激情影音先锋| 国产丝袜视频一区| 亚洲精品国产美女| 日本高清不卡在线| 黑人与娇小精品av专区| 久久精品视频播放| 欧美成人免费在线视频| 欧美高清在线视频观看不卡| 亚洲精品国产精品国产自| 国产精品吴梦梦| 国产精品久久久久久久久久久久久| 国产成人综合精品| 成人免费观看49www在线观看| 国产成人极品视频| 国产成人在线精品| 久久精品视频网站| 欧美国产日本在线| 日本在线观看天堂男亚洲| 国产亚洲精品va在线观看| 亚洲乱码国产乱码精品精| 国产999精品| 97久久国产精品| 久久天天躁狠狠躁老女人| 高清欧美一区二区三区| 中文国产成人精品久久一| 欧美激情在线一区| 久久成年人免费电影| 国产高清在线不卡| 亚洲欧美制服丝袜| 欧美中在线观看| 国内精品久久久久久久| 国产午夜精品久久久| 视频一区视频二区国产精品| 一本色道久久综合亚洲精品小说| 亚洲欧美综合另类中字| 日本精品久久中文字幕佐佐木| 在线播放亚洲激情| 亚洲免费人成在线视频观看| 国产日韩精品一区二区| 亚洲大胆人体av| 欧美激情精品久久久久久| 亚洲伊人久久大香线蕉av| 国产91在线高潮白浆在线观看| 亚洲xxxxx电影| 亚洲精品久久久久| 亚洲精品国精品久久99热| 亚洲自拍偷拍色片视频| 亚洲欧洲日韩国产| 欧美日韩视频免费播放| 日韩av一卡二卡| 国产精品一区二区电影| 欧美日本精品在线| 亚洲在线视频观看| 国产精品网红福利| 欧美成人性生活| 国产亚洲一区精品| 萌白酱国产一区二区| 午夜精品三级视频福利| 成人夜晚看av| 国产精品wwwwww| 国产精品九九久久久久久久| 国产成人精品久久二区二区91| 正在播放欧美视频| 国产成人一区三区| 亚洲毛片在线免费观看| 久久影视电视剧免费网站清宫辞电视| 欧美体内谢she精2性欧美| 久久精品人人做人人爽| 日韩经典中文字幕在线观看| 日韩av综合网站| 国产亚洲成精品久久| 亚洲毛片在线观看| 一区二区成人精品| 亚洲春色另类小说| 奇门遁甲1982国语版免费观看高清| 国产精品第8页| 欧美尤物巨大精品爽| 久久久综合av| 久久亚洲精品国产亚洲老地址| 97久久国产精品| 国产亚洲欧洲在线| 久久久www成人免费精品| 欧美日韩人人澡狠狠躁视频| 92福利视频午夜1000合集在线观看| 成人欧美一区二区三区黑人| 成人网中文字幕| 日韩av在线免费观看| 亚洲男人第一网站| 51ⅴ精品国产91久久久久久| 久久噜噜噜精品国产亚洲综合| 久久精品国产一区| 亚洲一级一级97网| 国产精品偷伦视频免费观看国产| 粉嫩av一区二区三区免费野| 韩国19禁主播vip福利视频| 成人免费福利视频| 色先锋资源久久综合5566| 欧洲永久精品大片ww免费漫画| 日韩中文第一页| 欧美日韩美女在线| 日韩毛片在线看| 国产欧美一区二区三区久久| 亚洲欧美国产精品久久久久久久| 亚洲免费人成在线视频观看| 黄网站色欧美视频| 国产成人福利夜色影视| 琪琪第一精品导航| 久久久亚洲欧洲日产国码aⅴ| 成人精品福利视频| 在线视频精品一| 最近的2019中文字幕免费一页| 国产精品自产拍在线观看| 久久躁日日躁aaaaxxxx| 欧美激情久久久| 另类少妇人与禽zozz0性伦| 欧美在线免费视频| 日韩在线观看高清| 欧美日韩国产精品一区二区三区四区| 91欧美精品午夜性色福利在线| 久久久久久久久久久久久久久久久久av| 97在线看免费观看视频在线观看| 日韩一中文字幕| 国产精品久久久久久久久久久不卡| 国产精品91在线| 中文字幕视频在线免费欧美日韩综合在线看| 在线国产精品播放| 亚洲人成电影网站色www| 97在线视频免费观看| 国模私拍一区二区三区| 日韩亚洲欧美中文在线| 久久久成人精品| 在线播放日韩精品| 欧美xxxx14xxxxx性爽| 91视频国产高清| 91禁国产网站| 久久九九亚洲综合| 国产精品入口日韩视频大尺度| 欧美日韩亚洲天堂| 欧美激情亚洲综合一区| 91精品久久久久久久久久另类| 中文字幕国产亚洲| 国产精品18久久久久久麻辣| 亚洲男人天天操| 亚洲综合在线做性| 亚洲影影院av| 97久久国产精品| 日韩美女视频在线观看| 亚洲国产中文字幕在线观看| 亚洲第一区第二区| 黑人精品xxx一区一二区| 国产精品色悠悠| 国产成人精品综合久久久|