cell自适应高度
来源:互联网 发布:科普是什么意思网络词 编辑:程序博客网 时间:2024/05/23 02:01
用了下cell自适应高度的方法,最常用的方法是使用:
CGFloat height=[self.myExpandCell.contentViewsystemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height+1;
具体的网上很多,我只说下大概步奏和常见的坑。
1.在类中声明个全局cell,
_cacheCell=[self.tableViewdequeueReusableCellWithIdentifier:@"WorkOrderImageCell"];
2.- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath*)indexPath {
UITableViewCell *cell=[tableViewdequeueReusableCellWithIdentifier:@"Cell"forIndexPath:indexPath];
cell.text=@"...";
}
注意:要加上后面的 forIndexPath:indexPath.
3. -(CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath{
_cacheCell.label.text=@"...";
CGFloat height=[_cacheCell.contentViewsystemLayoutSizeFittingSize:UILayoutFittingCompressedSize].height+1;
returnheight;
}
这里需要注意的 (1)_cacheCell.label.text=@"..."; 这句必须写,这个协议方法是在 步奏2 之前执行的,而且步奏2中也 必须再实现一次这个方法,不然label没有数据。
(2)求高度的方法是使用cell的contentView来计算的。
(3)+1是因为contentView的height比cell的height小1。
4.这步很关键:设置label的约束。整个cell的高度必须能直接通过竖直方向约束和高度约束相加计算出值(其他方向约束不能参与计算)。很多cell自适应不成功都是约束问题。
5.第一次用的时候做到这我就以为完了,但是搞了很久都没成功。
(1)设置label.numberOfLines=0; //行数自适应
(2)self.remarkLabel.preferredMaxLayoutWidth=lable.size.width; //这句很重要,这是设置单行最大宽度约束,必须设置,而且这里不建议在Storyboard上设置,在Storyboard上这个值不能随屏幕尺寸大小改变而改变。
ps:(悄悄说)lz被上面这句坑惨了
看了这么多,是不是有点晕?没关系,看LZ终极大招。
只用一步就自适应cell高度!!!
<pre name="code" class="objc"><span style="font-family:Comic Sans MS;font-size:14px;">- (CGFloat)cellHeight { __block CGFloat cellHeight = 0.0; [self.contentView.subviews enumerateObjectsUsingBlock:^(__kindof UIView * _Nonnull obj, NSUInteger idx, BOOL * _Nonnull stop) { if ([obj isKindOfClass:[UILabel class]]) { UILabel *label = (UILabel *)obj; CGFloat labelHeight = [label.text boundingRectWithSize:(CGSize){label.bounds.size.width,NSIntegerMax} options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName:label.font} context:nil].size.height - label.bounds.size.height; cellHeight += labelHeight; } }]; return cellHeight + self.contentView.bounds.size.height;}</span>
上面代码,直接拿走。调用这个方法就可以得到cell高度了, 是不是很简单?让约束见鬼去吧!
不过要注意的是,在计算高度前也要先给label.text 赋值,而且这个计算文本大小的方法是在ios7出来的,大家自己做下系统适配吧,lz偷下懒。
欢迎大家完善、指正这个方法,有好的建议请告诉我,三克油!
- UItableView cell 自适应高度
- iOS Cell高度自适应
- ios cell自适应高度
- iOS8 Cell 高度自适应
- Cell自适应高度
- cell单元格高度自适应
- cell自适应高度
- cell自适应高度
- cell的自适应高度
- cell自适应高度
- Cell自适应高度
- cell高度自适应
- cell高度自适应
- cell自适应高度
- cell自适应高度
- cell自适应高度
- masonry + 自适应cell高度
- cell自适应高度
- jQuery.qrcode.js客户端生成二维码,支持中文并且可以生成LOGO
- attr 和 prop 的区别
- RC522 SPI驱动 mini2440
- StringBuffer和StringBuilder的区别
- [设计模式]简单工厂模式
- cell自适应高度
- 制作java 批处理运行文件
- 添加VisualStadio的Mainbuild-Auto
- 02计算机优秀毕业论文-摘要·前言
- java移位运算符:<<(左移)、>>(带符号右移)和>>>(无符号右移)
- 让TableView的header区头跟随tableView一起滑动
- 最近5年133个Java面试问题列表
- N只猴子选大王(用模拟过程的方法解决)
- SSH框架(四) Spring、Spring MVC、Struts2优缺点整理