在寫OC的UI時,當在不同的機型上運行時,如果只用frame則會導致視圖中的控制元件嚴重變形,這是因為不同機型的螢屏大小不一樣,所以這周學習了masonry,掌握了一些基本用法,
在使用第三方庫Masonry之前,需要先安裝CocoaPods,
文章目錄
- CocoaPods的安裝
- Masonry的基本使用
- 三個約束和基礎API
CocoaPods的安裝
安裝教程
安裝好后,創建一個工程“test2”,創建結束后在終端輸入以下代碼:
cd /Users/haoqianbiao/Desktop/test2 //檔案的路徑
然后在終端輸入:
touch PodFile
之后我們的檔案里就多了一個Podfile的檔案
然后在該檔案里輸入:
platform :ios, '7.0'
target 'test2' do
pod 'Masonry'
end
//target后面的單引號里是你工程的名字
最后一步是在終端讀取PodFile找到相關類別庫下載并自動集成到專案中,同時生成新的*.xcworkspace檔案:
之后就直接打開xcworkspace檔案進行編程就可以了,
Masonry的基本使用
三個約束和基礎API
/添加新約束
- (NSArray *)mas_makeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
//更新約束,會覆寫之前的約束
- (NSArray *)mas_updateConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
//完全移除舊約束,添加新約束(重置)
- (NSArray *)mas_remakeConstraints:(void(NS_NOESCAPE ^)(MASConstraintMaker *make))block;
equalTo() 引數是物件型別,一般是視圖物件或者mas_width這樣的坐標系物件
mas_equalTo() 和上面功能相同,引數可以傳遞基礎資料型別物件,可以理解為比上面的API更強大
width() 用來表示寬度,例如代表view的寬度
mas_width() 用來獲取寬度的值,和上面的區別在于,一個代表某個坐標系物件,一個用來獲取坐標系物件的值
示例:
- (void)viewDidLoad {
[super viewDidLoad];
// Do any additional setup after loading the view.
UILabel* label = [[UILabel alloc] init];
[self.view addSubview:label];
[label mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(self.view);
make.top.equalTo(self.view).offset(100);
make.size.mas_equalTo(CGSizeMake(200, 50));
}];
label.backgroundColor = [UIColor blackColor];
UIButton* button = [UIButton buttonWithType:UIButtonTypeCustom];
[self.view addSubview:button];
[button mas_makeConstraints:^(MASConstraintMaker *make) {
make.centerX.equalTo(label);
make.top.equalTo(label.mas_bottom).offset(100);
make.size.mas_equalTo(CGSizeMake(200, 50));
}];
[button setBackgroundColor:[UIColor yellowColor]];
[button setTitle:@"更新約束" forState:UIControlStateNormal];
[button addTarget:self action:@selector(press:) forControlEvents:UIControlEventTouchUpInside];
[button setTitleColor:[UIColor blackColor] forState:UIControlStateNormal];
}
-(void) press:(UIButton*) btn {
[btn mas_updateConstraints:^(MASConstraintMaker *make) {
make.size.mas_equalTo(CGSizeMake(100, 100));
}];
}
效果:


轉載請註明出處,本文鏈接:https://www.uj5u.com/yidong/297872.html
標籤:其他
