iOS自适应行高方法及问题

最近一周被项目的动态高度虐的很惨,感觉浪费了很多时间,但是值得高兴的是对动态高度的使用掌握了好多方法,并且知道了方法之间的区别和优缺点.

1.最常用的:

UITableView+FDTemplateLayoutCell

优点就不说了,博客大把的有;

缺点就是这个第三方必须将自己的每个子控件的约束是正确的,一旦哪个约束错误,或者是冲突,就会导致莫名的崩溃;

 

2.在控制器中对返回的数据根据文字多少自动计算高度:

对动态高度的控件根据文字的多少确定高度,从而得到总的cell的高度,对于行高将计算的结果存到对应的数据源model中,返回单元格高度的时候,直接返回model的高度即可.

注意如果可以对数据进行修改的话,记得调用的时候要在返回高度的协议方法里调用计算高度的方法,因为刷新表视图会走这方法,不会走创建cell的方法.

缺点就是:当内容过多的时候会计算不准确,还是有点坑.

3.在model中计算高度,设置属性单元格的高度属性,控制器直接返回即可;<和第二种方法类似,只是计算的地方不同,还可以在cell里计算,不过这个好像不行,因为创建cell的时候会先走高度的方法>

4.最简单的:

两句代码解决高度问题:

//    self.tableView.estimatedRowHeight = 200; //设置预估高度,只要不是差的太离谱就行

//    self.tableView.rowHeight = UITableViewAutomaticDimension;// 自定计算

话说只能在iOS8系统上才能使用,但看API在6.0就可以了,不过在7的系统上貌似会崩溃.<这个还是到去年的时候再用吧...嘿嘿>

5.最后项目中还是用的这个方法:MyLinearLayout

MyLinearLayout的实现充分参考了Android中的LinearLayout布局,但是却比LinearLayout更为强大,他几乎可以实现AutoLayout的所有功能甚至其不具备的功能。MyLinearLayout是一个基于流式布局的容器视图,我们只需要把子视图添加到MyLinearLayout中,并设置一些简单的约束参数那么就可以完成各种布局的要求了,而且后续中只要子视图的位置和大小进行变化都会触发容器视图里面的子视图进行重新布局。

缺点就是:性能不高,会一直的计算高度.

 

对高度的问题就总结到这里了,希望大神纠错或者是提出建议,我们一起学习,嘿嘿!!!!!!

转载于:https://www.cnblogs.com/pengsi/p/5713877.html

要实现自适应行高,可以使用POI提供的`Sheet`的`autoSizeColumn`方法和`Row`的`setHeight`方法。 具体步骤如下: 1. 创建`Workbook`和`Sheet`对象,例如: ``` Workbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet("Sheet1"); ``` 2. 创建`CellStyle`对象,并设置自动换行属性为true,例如: ``` CellStyle style = wb.createCellStyle(); style.setWrapText(true); ``` 3. 创建`Row`对象和`Cell`对象,并设置样式和值,例如: ``` Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue("这是一个需要自适应行高的长文本,需要自动换行"); cell.setCellStyle(style); ``` 4. 使用`autoSizeColumn`方法自适应列宽,例如: ``` sheet.autoSizeColumn(0); ``` 5. 使用`setHeight`方法设置行高,例如: ``` row.setHeightInPoints((2*sheet.getDefaultRowHeightInPoints())); ``` 其中,`getDefaultRowHeightInPoints`方法可以获取默认的行高,`setHeightInPoints`方法可以设置行高,需要将像素值转换为磅值,因为POI使用的是磅值来表示行高。 完整代码示例: ``` Workbook wb = new XSSFWorkbook(); Sheet sheet = wb.createSheet("Sheet1"); CellStyle style = wb.createCellStyle(); style.setWrapText(true); Row row = sheet.createRow(0); Cell cell = row.createCell(0); cell.setCellValue("这是一个需要自适应行高的长文本,需要自动换行"); cell.setCellStyle(style); sheet.autoSizeColumn(0); row.setHeightInPoints((2*sheet.getDefaultRowHeightInPoints())); ``` 这样就实现了自适应行高的功能。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值