1. 程式人生 > >iOS自適應佈局之Masonry(一)

iOS自適應佈局之Masonry(一)

前言

iPhone 5之前我們對應用佈局停留在3.5寸一個螢幕的階段,當時的安卓屌絲們是多麼的羨慕iOS開發,不會被大量的螢幕適配所煩惱。隨著iPhone產品的迭代,逐漸出現4寸、4.7寸、5.5寸….,你們說,iphone10+會有多少寸?O(∩_∩)O~

簡介

正因為上面說的那樣,螢幕的尺寸逐步增多,還沿用以前的方法佈局顯然是不行的,這時候為佈局引進新的結局辦法NSAutoLayout,但蘋果提供的比較複雜麻煩,所以就有人在此基礎上進行封裝,而提供一種高效的框架—-Masonary

安裝

如何安裝框架?還是建議用CocoaPods,這裡有我之前寫的CocoaPods相關用法

         pod 'Masonry'

使用說明

使用引數功能說明表

這裡寫圖片描述

開擼

1.居中顯示一個View,並能時刻保持比螢幕的寬和高少60畫素

UIView *view1=[[UIView alloc]init];

view1.backgroundColor=[UIColor brownColor];

[self.view addSubview:view1];

[view1 mas_makeConstraints:^(MASConstraintMaker *make) {
    make.center.equalTo(self.view);
    make.top.equalTo(self.view).with.offset(30);
    make.left.equalTo(self.view).with.offset(30);
    make.bottom.equalTo(self.view).with.offset(-30);
    make.right.equalTo(self.view).with.offset(-30);
}];

這裡寫圖片描述

這裡需要注意的是:控制元件用Masonry約束的時候必須先將控制元件用addSubview載入到父檢視中才能進行約束,不然就會造成崩潰。

Masonry中有三個函式

  • (NSArray *)mas_makeConstraints:(void(^)(MASConstraintMaker *make))block;
  • (NSArray *)mas_updateConstraints:(void(^)(MASConstraintMaker *make))block;
  • (NSArray *)mas_remakeConstraints:(void(^)(MASConstraintMaker *make))block;

mas_makeConstraints 只負責增加約束,當對同一個控制元件兩次呼叫這個函式就會造成崩潰。

mas_updateConstraints 更新約束,用mas_makeConstraints定義約束之後,可以用更新約束進行補充

mas_remakeConstraints 作用比較霸道,刪除之前對該控制元件存在的所有約束,只保留block函式裡面的最新約束。
上面的

    make.center.equalTo(self.view);

    make.top.equalTo(self.view).with.offset(30);

    make.left.equalTo(self.view).with.offset(30);

    make.bottom.equalTo(self.view).with.offset(-30);

    make.right.equalTo(self.view).with.offset(-30); 

你是不是想更優雅,更棒一點呢?可以這樣:

UIEdgeInsets padding = UIEdgeInsetsMake(30, 30, -30, -30);
 make.center.equalTo(self.view);

 make.top.equalTo(self.view).with.offset(padding.top);

 make.left.equalTo(self.view).with.offset(padding.left);

 make.bottom.equalTo(self.view).with.offset(padding.bottom);

  make.right.equalTo(self.view).with.offset(padding.right); 

我們還可以簡化為

make.edges.equalTo(self.view).with.insets(UIEdgeInsetsMake(10, 10, 10, 10)); 

也可以這樣:

  make.top.left.bottom.and.right.equalTo(self.view).with.insets(UIEdgeInsetsMake(10, 10, 10, 10)); 

這一篇主要簡單學習一下Masonry,下一篇會給大家帶來高階應用,_