博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
[iOS开发]iOS列表单元格高度不固定
阅读量:7242 次
发布时间:2019-06-29

本文共 1751 字,大约阅读时间需要 5 分钟。

hot3.png

运行平台: iOS 7.1.2

编辑器: Xcode 6 GM
语言: Swift

iOS创建一个列表很容易,直接使用Table View即可。但是,一般的单元格高度在设定后,就固定了。有些需求可能需要单元格高度随内容多少而变化 。比如单元格有一个UILabel, 希望其高度随其内容变化,行数不固定。

动态单元格基本原理

  1. 正确地设置constraints
  2. 自定义单元格类
  3. 重写tableView: heightForRowAtIndexPath这个方法

分析

首先,必须要把约束条件弄好,这个是最重要的一步!可以参考文章结尾的引用。

基本可以总结为: 不要限定宽高,上下左右其它元素距离设置清楚 。
PS:有些时候,使用Suggested Constraints似乎也不错。

第二步,自定义单元格。自定义的类中需要关注的是重写一个方法layoutSubviews,如下:

override func layoutSubviews() {    super.layoutSubviews()        // Make sure the contentView does a layout pass here so that its subviews have their frames set, which we    // need to use to set the preferredMaxLayoutWidth below.    self.contentView.setNeedsLayout()    self.contentView.layoutIfNeeded()    // 这句非常重要,设置真实的布局宽度    self.detailLabel.preferredMaxLayoutWidth = CGRectGetWidth(self.detailLabel.frame)}

第三步,重写ViewController中的获取单行高度的方法,如下:

override func tableView(tableView: UITableView, heightForRowAtIndexPath indexPath: NSIndexPath) -> CGFloat {    var handleCell: CustomCell? = tableView.dequeueReusableCellWithIdentifier("MyCell") as? CustomCell    var cell: CustomCell        if (handleCell != nil) {        cell = handleCell!    } else {        cell = CustomCell()    }        // 这里设置单元格内容    cell.detailLabel.text = "...你的内容..."    cell.setNeedsUpdateConstraints()    cell.updateConstraintsIfNeeded()        cell.bounds = CGRectMake(0.0, 0.0, CGRectGetWidth(tableView.bounds), CGRectGetHeight(cell.bounds))        cell.setNeedsDisplay()    cell.layoutIfNeeded()    var size = cell.contentView.systemLayoutSizeFittingSize(UILayoutFittingCompressedSize)        return size.height + 1;}

OK,基本到这里就应该可以做出一个单元格动态高度的列表了。

当然,如果你出错了,可以参看下面的引用。上面的方法是我对下面这些引用作的一个简洁的总结,未经过多测试,不保证绝对正确性。

引用

这些引用都稍显繁琐,按自己所需取吧!

转载于:https://my.oschina.net/dmdgeeker/blog/313114

你可能感兴趣的文章
3 构建Mysql+heartbeat+DRBD+LVS集群应用系统系列之heartbeat的搭建
查看>>
第一百二十三节,JavaScript错误处理与调试
查看>>
WebAssembly,可以作为任何编程语言的编译目标,使应用程序可以运行在浏览器或其它代理中——浏览器里运行其他语言的程序?...
查看>>
【公告】博客数据异常已所有恢复
查看>>
JavaScript 刚開始学习的人应知的 24 条最佳实践
查看>>
java中finalkeyword
查看>>
.net core中使用Type.GetType()从字符串获取类型遇到的问题
查看>>
select选中获取索引三种写法
查看>>
词袋模型bow和词向量模型word2vec
查看>>
分享升级架构师路上的体会,兼说我为什么有挣钱紧迫感
查看>>
浏览器 HTTP 协议缓存机制详解
查看>>
understand软件使用教程(转)
查看>>
【JavaScript】 JS面向对象的模式与实践
查看>>
13.ng-value
查看>>
8天掌握EF的Code First开发系列之动手写第一个Code First应用
查看>>
【Django】 积累
查看>>
iOS App的加固保护原理
查看>>
测试左移和测试右移
查看>>
云开发初探 —— 更简便的小程序开发模式
查看>>
CSharpGL(49)试水OpenGL软实现
查看>>