Masonry是一个轻量级的布局框架 采用更优雅的链式语法封装自动布局简洁明了.
用masonry已经有一段时间,也就是停留在官方demo的事例基础上,今天有空就刚好研究一下zorro写的一个demo
子视图始终是父视图的一半改怎么写:
UIView*subView = [UIViewnew];
subView.backgroundColor= [UIColorredColor];
[_containerViewaddSubview:subView];
[subViewmas_makeConstraints:^(MASConstraintMaker*make) {
//上下左贴边
make.left.equalTo(_containerView.mas_left);
make.top.equalTo(_containerView.mas_top);
make.bottom.equalTo(_containerView.mas_bottom);
//宽度为父view的宽度的一半
make.width.equalTo(_containerView.mas_width).multipliedBy(0.5);
}];
tableviewcell高度根据内容自适应:
这里分为2种情况,ios8之后tableview有个新的特性可以计算cell内容返回高度:
// iOS 8的Self-sizing特性
if([UIDevice currentDevice].systemVersion.integerValue >7) {
_tableView.rowHeight = UITableViewAutomaticDimension;
}
或者用masonry计算cell高度
- (CGFloat)tableView:(UITableView*)tableView heightForRowAtIndexPath:(NSIndexPath*)indexPath {
#ifdef IOS_8_NEW_FEATURE_SELF_SIZING
// iOS 8的Self-sizing特性
return UITableViewAutomaticDimension;
#else
staticCase4Cell*templateCell;
staticdispatch_once_tonceToken;
dispatch_once(&onceToken, ^{
templateCell = [tableViewdequeueReusableCellWithIdentifier:NSStringFromClass([Case4Cellclass])];
});
//获取对应的数据
Case4DataEntity*dataEntity =_data[(NSUInteger) indexPath.row];
//判断高度是否已经计算过
if(dataEntity.cellHeight<=0) {
//填充数据
[templateCellsetupData:dataEntity];
//根据当前数据,计算Cell的高度,注意+1
dataEntity.cellHeight= [templateCell.contentViewsystemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height+0.5f;
NSLog(@"Calculate height: %ld", (long) indexPath.row);
}else{
NSLog(@"Get cache %ld", (long) indexPath.row);
}
returndataEntity.cellHeight;
#endif
}