乡下人产国偷v产偷v自拍,国产午夜片在线观看,婷婷成人亚洲综合国产麻豆,久久综合给合久久狠狠狠9

  • <output id="e9wm2"></output>
    <s id="e9wm2"><nobr id="e9wm2"><ins id="e9wm2"></ins></nobr></s>

    • 分享

      iOS界面布局之四

       Han_Count 2016-04-07

      iOS界面布局之四——使用第三方庫Masonry進行autolayout布局

      一、引言

              在前面博客,我們討論了使用iOS原生的框架代碼來進行autolayout布局。在使用中,我們會發(fā)現(xiàn),無論是代碼量還是結構的清晰度,都十分不能讓我們滿意,在storyBoard中只需要幾條線就可以搞定的事情,用代碼缺要寫冗余的一大堆。并且有些時候,故事版并不能解決所有問題,某些控件必須我們手寫,這樣的話,我們就不得不進行代碼的autolayout布局,幸運的是,Masonry可以幫助我們輕松愉快的完成這一任務。

      使用代碼進行autolayout布局:http://my.oschina.net/u/2340880/blog 。

      二、使用Masonry

              這里說的大部分內容均來自Masonry和官方gitHub,將其內容進行了翻譯和解釋,源地址如下:https://github.com/SnapKit/Masonry

      1、布局的控件屬性對照

              無論是用storyBoard還是代碼,在設置控件之間layout關系的時候,我們都需要設置控件的位置屬性。在下面的方法中,這個位置屬性就是NSLayoutAttribute對象,他決定的控件對象的參照位置:

      1
      2
      3
      4
      5
      +(instancetype)constraintWithItem:(id)view1 attribute:(NSLayoutAttribute)attr1 
                                                  relatedBy:(NSLayoutRelation)relation 
                                                  toItem:(nullable id)view2 
                                                  attribute:(NSLayoutAttribute)attr2 
                                                  multiplier:(CGFloat)multiplier constant:(CGFloat)c;

      在Masonry中,有一系列的屬性與之成對應關系,對照如下:

      2、3個方法讓你玩轉Masonry約束操作

              Masonry在UIView的類別中,有3個全局的操作約束的方法,通過他們我們可以自由的進行autolayout的設置。

      添加約束:

      1
      - (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block;

      這個方法用于我們在最開始時為控件設置的約束,在block中進行約束條件的設置,例如我們創(chuàng)建一個label,將其尺寸設置為50*50,放在屏幕中間,使用如下代碼:

      注意:在添加約束前,必須將視圖添加到其父視圖上。

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
      - (void)viewDidLoad {
          [super viewDidLoad];
          // Do any additional setup after loading the view, typically from a nib.
          UILabel * label = [[UILabel alloc]init];
          [self.view addSubview:label];
          [label mas_makeConstraints:^(MASConstraintMaker *make) {
              make.center.equalTo(self.view);
              make.height.equalTo(@50);
              make.width.equalTo(@50);
          }];
          label.backgroundColor = [UIColor redColor];
      }

      效果如下:

      更新約束:

      當我們需要配合布局改變或者動畫效果的時候,我們可能需要將已經(jīng)添加的約束進行更新操作,使用如下的方法:

      1
      2
      3
      4
      [label mas_updateConstraints:^(MASConstraintMaker *make) {
              make.height.equalTo(@100);
              make.width.equalTo(@100);
          }];

      更新約束的作用在于更新已經(jīng)添加的某些約束,并不會移除掉原有的約束,如果我們需要添加新的約束,可以使用下面的重設約束的方法。

      重設約束:

      1
      2
      3
      4
      5
      6
      [label mas_remakeConstraints:^(MASConstraintMaker *make) {
              make.left.equalTo(self.view.mas_left).offset(10);
              make.top.equalTo(self.view.mas_top).offset(100);
              make.height.equalTo(@100);
              make.width.equalTo(@100);
          }];

      3、約束值相關

              在添加具體約束的時候,我們不僅可以將約束值設置為絕對的相等關系,也可以設置一些值域的關系,在Masonry中,有如下三種:

      1
      2
      3
      4
      5
      6
      //絕對相等
      - (MASConstraint * (^)(id attr))equalTo;
      //大于等于
      - (MASConstraint * (^)(id attr))greaterThanOrEqualTo;
      //小于等于
      - (MASConstraint * (^)(id attr))lessThanOrEqualTo;

      對于約束的優(yōu)先級,使用如下幾個量:

      1
      2
      3
      4
      5
      6
      7
      8
      //手動設置一個優(yōu)先級參數(shù)
      - (MASConstraint * (^)(MASLayoutPriority priority))priority;
      //優(yōu)先級低
      - (MASConstraint * (^)())priorityLow;
      //優(yōu)先級中等
      - (MASConstraint * (^)())priorityMedium;
      //優(yōu)先級高
      - (MASConstraint * (^)())priorityHigh;

      寫法如下:

      1
      2
      3
      4
      5
      6
      [label mas_remakeConstraints:^(MASConstraintMaker *make) {
              make.left.equalTo(self.view.mas_left).offset(10);
              make.top.equalTo(self.view.mas_top).offset(100);
              make.height.equalTo(@100).priority(1000);
              make.width.equalTo(@100).priorityHigh();
          }];

      三、Masonry設置約束的幾個示例

      1、設置視圖與其父視圖的邊距約束

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      - (void)viewDidLoad {
          [super viewDidLoad];
          // Do any additional setup after loading the view, typically from a nib.
          label = [[UILabel alloc]init];
          [self.view addSubview:label];
          [label mas_makeConstraints:^(MASConstraintMaker *make) {
              make.edges.equalTo(self.view).insets(UIEdgeInsetsMake(20, 20, 20, 20));
          }];
          label.backgroundColor = [UIColor redColor];
      }

      設置上下左右與其父視圖邊距為20px,效果如下:

       

      2、約束控件的尺寸為固定值

      1
      2
      3
      4
      5
      [label mas_makeConstraints:^(MASConstraintMaker *make) {
              make.height.equalTo(@200);
              make.width.equalTo(@200);
              make.center.equalTo(self.view);
          }];

      位置約束設置在了屏幕的中間,效果如下:

      3、約束控件之間的尺寸

      1
      2
      3
      4
      5
      6
      7
      8
      9
      10
      11
      12
        [label mas_makeConstraints:^(MASConstraintMaker *make) {
              make.height.equalTo(@100);
              make.width.equalTo(label2);
              make.right.equalTo(label2.mas_left).offset(-100);
              make.leading.equalTo(self.view.mas_leading).offset(20);
              make.centerY.equalTo(self.view);
          }];
          [label2 mas_makeConstraints:^(MASConstraintMaker *make) {
              make.height.equalTo(@100);
              make.centerY.equalTo(label);
              make.trailing.equalTo(self.view.mas_trailing).offset(-20);
          }];

      設置了兩個label寬度一致,相距100px,分別距離左右邊距20px,效果如下:

        本站是提供個人知識管理的網(wǎng)絡存儲空間,所有內容均由用戶發(fā)布,不代表本站觀點。請注意甄別內容中的聯(lián)系方式、誘導購買等信息,謹防詐騙。如發(fā)現(xiàn)有害或侵權內容,請點擊一鍵舉報。
        轉藏 分享 獻花(0

        0條評論

        發(fā)表

        請遵守用戶 評論公約

        類似文章 更多