xib动态改变cell行高
2015-12-17 16:14
197 查看
布局如下
![](http://images2015.cnblogs.com/blog/657299/201512/657299-20151217153324787-53206127.png)
![](http://images2015.cnblogs.com/blog/657299/201512/657299-20151225093301812-902334222.png)
共3个控件,一个头像,一个背景,一个message
现在当输入多行文字时希望cell动态的调整行高
那么首先头像的高度肯定是不希望改变的,所以头像的宽度是有contentview的宽度来决定的,它的高得1:1(其他的也可以)取决于它的宽度,这样contnetview高度变化时就不会影响头像大高度
然后设置uilabel多行显示有些许不同
参考
XIB下UILabel的自动换行(可动态换行以及调整高度)
用以创建cell,那么如何在创建前就设置好高度就相当重要了
如果是纯代码的话,一般这么处理
首先创建cell之前先行获取到数据源,然后数据源根据cell索引查找到该条数据,然后处理该条数据获得高度在heightForRow里进行返还即可
如果是纯文本的信息还好处理,一旦数据样式多变就比较麻烦了,而且这里面的属性配置
是以xib中的为准的,就是此处无效(那为什么要写?万一要代码写忘记就麻烦了)
使用xib自适应的话
首先如何设置高度
是的,采用系统提供的行高估算方法来获取一个临时的cell高度,当cell真正的依靠约束改变高度时并创建完成时就会自动的替换高度了
那么约束改变行高的关键是
确保每个子视图垂直方向上的内容压缩阻力(compression resistance)和吸附性约束(hugging constraints)没有被你添加的更高优先级的约束条件覆盖,让这些子视图的固有内容尺寸(intrinsic content size)来驱动contentView的高度。
依靠内容驱动,而且是最高优先级(至少在改变高度这件事上)注意内容驱动的话代表的是所有的直接可以影响到contentview高度的控件,这里的话都会影响到,如果背景图的像素高一开始足够大或者等于了cell的高度都会应影响的,头像同理,为了保持文字完全显示在背景上所以背景的高度是由message来的驱动的
![](http://images2015.cnblogs.com/blog/657299/201512/657299-20151217161005099-1633940323.png)
自带的表情可以直接显示还真是意外
宽度的好像没做。。。。。。。。。
![](http://images2015.cnblogs.com/blog/657299/201512/657299-20151217153324787-53206127.png)
![](http://images2015.cnblogs.com/blog/657299/201512/657299-20151225093301812-902334222.png)
共3个控件,一个头像,一个背景,一个message
现在当输入多行文字时希望cell动态的调整行高
那么首先头像的高度肯定是不希望改变的,所以头像的宽度是有contentview的宽度来决定的,它的高得1:1(其他的也可以)取决于它的宽度,这样contnetview高度变化时就不会影响头像大高度
然后设置uilabel多行显示有些许不同
参考
XIB下UILabel的自动换行(可动态换行以及调整高度)
使用Autolayout实现UITableView的Cell动态布局和高度动态改变(这是翻译)
Using Auto Layout in UITableView for dynamic cell layouts & variable row heights(这是原文)
根据上面的建议知道,创建cell会预先多次调用-(CGFloat)tableView:(nonnull UITableView *)tableView heightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath
用以创建cell,那么如何在创建前就设置好高度就相当重要了
如果是纯代码的话,一般这么处理
首先创建cell之前先行获取到数据源,然后数据源根据cell索引查找到该条数据,然后处理该条数据获得高度在heightForRow里进行返还即可
-(CGFloat)tableView:(nonnull UITableView *)tableView heightForRowAtIndexPath:(nonnull NSIndexPath *)indexPath
{
NSString* string=dataSource.nsArrayModels[indexPath.row];
CGSize size=[string boundingRectWithSize:CGSizeMake(tableView.frame.size.width, MAXFLOAT)
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:[UIFont systemFontOfSize:12.f],NSBackgroundColorAttributeName:[UIColor yellowColor]}
context:nil].size;
return size.height;
}
如果是纯文本的信息还好处理,一旦数据样式多变就比较麻烦了,而且这里面的属性配置
@{NSFontAttributeName:[UIFont systemFontOfSize:12.f],NSBackgroundColorAttributeName:[UIColor yellowColor]
是以xib中的为准的,就是此处无效(那为什么要写?万一要代码写忘记就麻烦了)
使用xib自适应的话
首先如何设置高度
//开启估算行高根据内容动态的修改cell高度 self.tableview0.estimatedRowHeight=20.f; self.tableview0.rowHeight=UITableViewAutomaticDimension;
是的,采用系统提供的行高估算方法来获取一个临时的cell高度,当cell真正的依靠约束改变高度时并创建完成时就会自动的替换高度了
那么约束改变行高的关键是
确保每个子视图垂直方向上的内容压缩阻力(compression resistance)和吸附性约束(hugging constraints)没有被你添加的更高优先级的约束条件覆盖,让这些子视图的固有内容尺寸(intrinsic content size)来驱动contentView的高度。
依靠内容驱动,而且是最高优先级(至少在改变高度这件事上)注意内容驱动的话代表的是所有的直接可以影响到contentview高度的控件,这里的话都会影响到,如果背景图的像素高一开始足够大或者等于了cell的高度都会应影响的,头像同理,为了保持文字完全显示在背景上所以背景的高度是由message来的驱动的
![](http://images2015.cnblogs.com/blog/657299/201512/657299-20151217161005099-1633940323.png)
自带的表情可以直接显示还真是意外
宽度的好像没做。。。。。。。。。
相关文章推荐
- 如何选择使用的HTML标签
- 1058: [ZJOI2007]报表统计
- K-最近邻算法
- leetcode -- Surrounded Regions -- 典型题。BFS
- 自动化测试小实例
- Gradle学习笔记(二)
- Oracle 11g R2 64位在 win7 64位的安装流程图解
- hdu 4735Little Wish~ lyrical step~ 重复覆盖
- 信息学奥林匹克竞赛-津津的储蓄计划
- gdb 技巧学习
- 数据挖掘:K最近邻(KNN)算法的java实现
- SELECTOR
- shell脚本中导入mysql数据&&执行mysql语句
- Java输入输出流详解
- MathJax在IE中公式不解析
- java 读取ftp文件时特殊字符乱码
- PHPUnit测试私有属性和方法
- 半平面交总结and模板
- android——生成或者下载的图片在相册中找不到
- 問題排查:index was out of range (1)