随着约束布局的越来越流行,很多项目正在逐步由frame布局转移到约束布局。最近就有几个朋友说道,新项目要求用约束来布局,而用约束来进行布局,Masonry作为一个强大的三方库,就不得不提了。此篇文章,就是简单的使用Masonry来进行布局,以tableView为实例,进行讲解,在demo里会有相应的注释。这个demo,感觉能满足基本的需求,若有哪里不足或不正确,欢迎指出。
注意:如果你的项目,父视图是ScrollView,那么我建议你,还是不要用Masonry。scrollView自身就是有约束设置的,再用Masonry进行子视图的约束,子视图的约束将会失效,当然如果你有很长的时间来研究scrollView自身约束和Masonry库约束的冲突的话(这里姑且让我用冲突这个词语吧),那你可以肆无忌惮的使用Masonry库了。
效果图在结尾处
下面直接贴代码:
ViewController.m文件
#import "ViewController.h"
#import "TableViewCell.h"
#import "TableViewModel.h"
#import "TableHeaderView.h"
#import "Masonry.h"
@interface ViewController ()<UITableViewDataSource,UITableViewDelegate>
@property (nonatomic,strong)TableHeaderView *headerView;
@property (nonatomic,strong)UITableView *tableView;
@property (nonatomic,strong)NSMutableArray *dataSource;
@end
static NSString *const cellIdentifier =@"cellIdentifier";
@implementation ViewController
- (void)viewDidLoad
{
[superviewDidLoad];
[self loadData];
}
- (void)loadData
{
self.dataSource = [NSMutableArrayarrayWithCapacity:0];
for (int i =0; i <20; i++)
{
TableViewModel *model = [[TableViewModelalloc]init];
if (i %2 ==0)
{
model.isLeft = @"1";
model.title = @"这是左侧的title";
model.headerTitle =@"这是imageView在左侧的组头上的title";
}
else
{
model.isLeft = @"0";
model.title =@"这是右侧的title这是右侧的title";
model.headerTitle =@"这是imageView在右侧的组头上的title";
}
[self.dataSourceaddObject:model];
}
[self.tableViewreloadData]