美文网首页
cell高度自适应

cell高度自适应

作者: 古月思吉 | 来源:发表于2018-03-28 18:35 被阅读0次
  • 背景:文本太多,文字显示不完整;tableView(或 collectionView)中嵌套tableView(或者 collectionView),由于区域固定,造成滑动里面有滑动,用户体验不好... 这些情况,可能需要实现cell的高度自定义。

一、带label的cell高度自定义:

tableView.estimatedRowHeight = 44.0
tableView.rowHeight = UITableViewAutomaticDimension
  • 注:
    (1)上面的两行代码都必须写,不然会造成布局错乱;
    (2)不用再重写 heightForRowAt 代理方法,否则,代理方法将覆盖上面的代码设置;
    (3)必须设置 label.numberOfLines = 0 ;
    (4)label 最好放在最外层的contentView上,否则,会至少保留label所在父视图的固定高度,即文字没有那么多时,仍然会留有最小高度;
label设置图.png 效果图.png

二、tableView中嵌套scrollView的cell高度自定义:

  • 方案:
    (1)在tableView刷新前,计算好每个cell需要的高度,再赋值;
    (2)在给scrollView赋值之后(刷新UI之后),获取scrollView.contentSize.height,即可获取这时候每个cell的高度,然后刷新tableView。

  • 方案评审:
    (1)第一种方案计算太过于繁琐,并且有时候计算不一定准确;
    (2)第二种方案简便,但是可能存在tableView中的scrollView还没有刷新好,就先获取到 scrollView.contentSize.height 的情况,造成刷新tableView之后,cell高度仍然不准确。这时候,需要tableView中的scrollView在reloadData之后,再获取 scrollView.contentSize.height 。

self.secondCell.collectionView.reloadData()
self.thirdCell.collectionView.reloadData()
//layoutIfNeeded():让刷新操作执行完之后才执行后续代码
self.secondCell.collectionView.layoutIfNeeded()
self.thirdCell.collectionView.layoutIfNeeded()

let secondCellHeight = self.secondCell.collectionView.contentSize.height + CGFloat(50)
let thirdCellHeight = self.thirdCell.collectionView.contentSize.height + CGFloat(80)
let newHeightArray = [CGFloat(60.0),secondCellHeight,thirdCellHeight,CGFloat(200.0)]
self.cellHeightArray = newHeightArray
self.tableView.reloadData()
效果图.png

相关文章

网友评论

      本文标题:cell高度自适应

      本文链接:https://www.haomeiwen.com/subject/rdjucftx.html