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 只負責增加約束,當對同一個控件兩次調用這個函數就會造成崩潰。<喎?/kf/ware/vc/" target="_blank" class="keylink">vcD4NCjxwPm1hc191cGRhdGVDb25zdHJhaW50cyC4/NDC1LzK+KOs08NtYXNfbWFrZUNvbnN0cmFpbnRztqjS5dS8yvjWrrrzo6y/ydLU08O4/NDC1LzK+L340NCyubPkPC9wPg0KPHA+bWFzX3JlbWFrZUNvbnN0cmFpbnRzINf308OxyL3PsNS1wKOsyb6z/daux7C21LjDv9i8/rTm1Nq1xMv509DUvMr4o6zWu7GjwfRibG9ja7qvyv3A78PmtcTX7tDC1LzK+KGjPGJyIC8+DQrJz8PmtcQ8L3A+DQo8cHJlIGNsYXNzPQ=="brush:java;">
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));