最近搭見面嘗試了下Masonry,感覺挺不錯的,比手寫frame快多了,又避免了storyboard和xib的復雜約束。
這是效果圖 ps:以前看到這樣的就愁死了,各種計算坐標,用Masonry分分鐘的事。

代碼:用的不是很熟練,有不少走了彎路的地方歡迎指正~~~~(>_<)~~~~
#import "HomeView.h"
#import <Masonry.h>
@implementation HomeView
@synthesize myEquipmentBtn,aboutCompanyBtn,errorRecordingBtn,equipmentStateBtn,remoteControlBtn,equipmentGraphBtn,guideBtn;
- (id)initWithFrame:(CGRect)frame {
self = [super initWithFrame:frame];
if (self) {
self.backgroundColor = [UIColor whiteColor];
[self setUpSubViews];
}
return self;
}
- (void)setUpSubViews {
/**
* 創建子視圖並添加
*/
//使用Masonry必須先把控件初始化,然後添加到共同的父視圖上
//我的設備
myEquipmentBtn = [UIButton buttonWithType:UIButtonTypeCustom];
// myEquipmentBtn.backgroundColor = [UIColor redColor];
[self addSubview:myEquipmentBtn];
[myEquipmentBtn setBackgroundImage:[UIImage imageNamed:@"1"] forState:0];
//關於我們
aboutCompanyBtn = [UIButton buttonWithType:UIButtonTypeCustom];
// aboutCompanyBtn.backgroundColor = [UIColor redColor];
[aboutCompanyBtn setBackgroundImage:[UIImage imageNamed:@"3"] forState:0];
[self addSubview:aboutCompanyBtn];
//故障記錄
errorRecordingBtn = [UIButton buttonWithType:UIButtonTypeCustom];
// errorRecordingBtn.backgroundColor = [UIColor redColor];
[errorRecordingBtn setBackgroundImage:[UIImage imageNamed:@"6"] forState:0];
[self addSubview:errorRecordingBtn];
//設備狀態
equipmentStateBtn = [UIButton buttonWithType:UIButtonTypeCustom];
// equipmentStateBtn.backgroundColor = [UIColor redColor];
[equipmentStateBtn setBackgroundImage:[UIImage imageNamed:@"2"] forState:0];
[self addSubview:equipmentStateBtn];
//遠程控制
remoteControlBtn = [UIButton buttonWithType:UIButtonTypeCustom];
// remoteControlBtn.backgroundColor = [UIColor redColor];
[remoteControlBtn setBackgroundImage:[UIImage imageNamed:@"4"] forState:0];
[self addSubview:remoteControlBtn];
//設備曲線圖
equipmentGraphBtn = [UIButton buttonWithType:UIButtonTypeCustom];
// equipmentGraphBtn.backgroundColor = [UIColor redColor];
[equipmentGraphBtn setBackgroundImage:[UIImage imageNamed:@"5"] forState:0];
[self addSubview:equipmentGraphBtn];
//使用說明
guideBtn = [UIButton buttonWithType:UIButtonTypeCustom];
// guideBtn.backgroundColor = [UIColor redColor];
[guideBtn setBackgroundImage:[UIImage imageNamed:@"guide"] forState:0];
[self addSubview:guideBtn];
/**
* 約束
*
* @param make <#make description#>
*
* @return <#return value description#>
*/
//我的設備
[myEquipmentBtn mas_makeConstraints:^(MASConstraintMaker *make) {
//上邊距離父視圖上邊5各單位
make.top.equalTo(self.mas_top).with.offset(5);
//左邊距離父視圖左邊0個單位
make.left.equalTo(self.mas_left).with.offset(0);
//寬等於父視圖寬的0.5倍 multipliedBy(0.5)設定比例
make.width.equalTo(self.mas_width).with.multipliedBy(0.5);
//高等於父視圖高的0.5倍
make.height.equalTo(self.mas_height).with.multipliedBy(0.2);
}];
//關於我們
[aboutCompanyBtn mas_makeConstraints:^(MASConstraintMaker *make) {
//上邊距離上部控件的底邊5個單位
make.top.equalTo(myEquipmentBtn.mas_bottom).with.offset(5);
//左邊距離父視圖左邊0個單位
make.left.equalTo(contentView.mas_left).with.offset(0);
//寬和上方的控件一樣寬
make.width.equalTo(myEquipmentBtn.mas_width);
//高是父視圖高的0.4倍
make.height.equalTo(self.mas_height).with.multipliedBy(0.4);
}];
//故障記錄
[errorRecordingBtn mas_makeConstraints:^(MASConstraintMaker *make) {
//上邊距離上部控件的底邊5個單位
make.top.equalTo(aboutCompanyBtn.mas_bottom).with.offset(5);
//左邊距離父視圖左邊0個單位
make.left.equalTo(self.mas_left).with.offset(0);
//等寬
make.width.equalTo(myEquipmentBtn.mas_width);
//下邊距離父視圖下邊-5個單位,,+5的話控件就跑出父視圖之外了,-5說明在父視圖裡面
make.bottom.equalTo(self.mas_bottom).with.offset(-5);
}];
//設備狀態
[equipmentStateBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(self.mas_top).with.offset(5);
make.left.equalTo(myEquipmentBtn.mas_right).with.offset(5);
make.right.equalTo(self.mas_right).with.offset(0);
make.height.equalTo(self.mas_height).with.multipliedBy(0.15);
}];
//遠程控制
[remoteControlBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(equipmentStateBtn.mas_bottom).with.offset(5);
make.left.equalTo(myEquipmentBtn.mas_right).with.offset(5);
make.width.equalTo(equipmentStateBtn.mas_width);
make.height.equalTo(self.mas_height).with.multipliedBy(0.15);
}];
//設備曲線圖
[equipmentGraphBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(remoteControlBtn.mas_bottom).with.offset(5);
make.left.equalTo(myEquipmentBtn.mas_right).with.offset(5);
make.width.equalTo(remoteControlBtn.mas_width);
make.height.equalTo(self.mas_height).with.multipliedBy(0.23);
}];
//使用說明
[guideBtn mas_makeConstraints:^(MASConstraintMaker *make) {
make.top.equalTo(equipmentGraphBtn.mas_bottom).with.offset(5);
make.left.equalTo(myEquipmentBtn.mas_right).with.offset(5);
make.width.equalTo(remoteControlBtn.mas_width);
make.bottom.equalTo(self.mas_bottom).with.offset(-5);
}];
}
@end