自适应高度,就是不用去计算某个控件高度,而让它自己去适应一个高度,是不是很神奇,我现在感觉挺神奇的。我之前写过一篇博客是利用Masonry让label实现高度的自适应,地址:http://blog.csdn.net/u010105969/article/details/52910521#reply
这里说一下masonry如何让cell的高度实现自适应,首先声明我是从这篇文章http://www.jianshu.com/p/bc4774e13b98#comment-15509339中学习到的,作者还给了我一个demo,真的很感谢那位作者,在这里再次感谢。
如何让cell实现高度的自适应呢?既然是自适应,那么cell的高度就不用去计算了,所以我们并不需要去实现
- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
return 30;
}
这个返回cell高度的代理方法(不去实现这个方法是关键,很重要)。
接下来的工作就很常规了,假设我们自定义的cell上只有一个label,label上的文字是动态的无法确定的,那么我们只需要利用masonry对label进行布局,设置label距离cell上、下、左、右的距离。代码:
// 布局
[_contentLabel mas_updateConstraints:^(MASConstraintMaker *make) {
// _masHeight = make.height.lessThanOrEqualTo(@50);
make.left.equalTo(_contentLabel.superview.mas_left).with.offset(20);
make.top.equalTo(_contentLabel.superview.mas_top).with.offset(20);
make.right.equalTo(_contentLabel.superview.mas_right).with.offset(-20);
make.bottom.equalTo(_contentLabel.superview.mas_bottom).with.offset(-20);
}];
注意:label的numberOfLines属性设置为0。重点代码还是高度可变的label距离底部的距离。
附上demo:https://github.com/yangguanghei/masonry-cell
就这样我们就能实现cell高度的自适应了,这样的做法相对于我之前的做法代码精简了许多。
再啰嗦几句我之前的做法,我之前的做法是先计算出label的高度,然后根据label上文字使用
boundingRectWithSize:<#(CGSize)#> options:<#(NSStringDrawingOptions)#> attributes:<#(nullable NSDictionary*)#> context:<#(nullable NSStringDrawingContext *)#>
这个方法去计算label的高度,然后再进行布局,而且在计算出一个cell的高度后还要去实现cell高度的方法,代码对于这种自适应方法明显多了很多。很感谢masonry让cell高度自适应,看来自己对masonry这个功能强大的三方的理解和使用还是不够啊,继续努力。
注意:如果是iOS10以及以下的版本需要设置TableView的estimatedRowHeight属性,而且不能为0,否则会出错(cell的高度仍然默认是44)。
本篇文章到这里就结束了,愿大家加班不多工资多,男同胞都有女朋友,女同胞都有男朋友。😊