自適應高度,就是不用去計算某個控件高度,而讓它自己去適應一個高度,是不是很神奇,我現在感覺挺神奇的。我之前寫過一篇博客是利用Masonry讓label實現高度的自適應,地址:http://blog.csdn.net/u010105969/article/details/52910521#reply
這里說一下masonry如何讓cell的高度實現自適應,首先聲明我是從這篇文章http://www.lxweimin.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)。
本篇文章到這里就結束了,愿大家加班不多工資多,男同胞都有女朋友,女同胞都有男朋友。??