在Swift中展开和编辑iOS表格单元格
来自 petethedeveloper.com的交叉发布
最近,我们实现了一项功能,该功能允许用户向UITextView中输入任意数量的文本,而UITextView本身包含在UITableViewCell中。 要求如下:
- textview不可滚动。 而是,textview应该随着内容大小的增加/减小而扩展/折叠。 textview永远不会小于指定的基本大小
- 单元格应该因为包含的textview展开/折叠而展开/折叠
下面,我描述我们如何做到的。
实施
实现分为三个步骤:
- 当textview的内容更改时,计算显示所有内容所需的框架的大小。 这是使用以下方法在UITextViewDelegate textViewDidChange(textView :)方法中计算的;
/ *计算显示所包含内容所需的帧大小
内容* /
让fixedWidth = textView.frame.size.width
让newSize = textView.sizeThatFits(CGSize(width:fixedWidth,height:.greatestFiniteMagnitude))
var newFrame = textView.frame
- 如果显示文本所需的框架大小与当前的textview框架大小不同,请更新textview框架的大小。 请记住,我们绝不会将textview框架的大小更新为小于我们指定的基本框架大小;
//我们的基本身高
let baseHeight:CGFloat = 50
/ *我们的新高度绝对不能小于我们的基本高度,因此请使用两个中的较大者* /
让高度:CGFloat = newSize.height> baseHeight? newSize.height:baseHeight
newFrame.size = CGSize(width:max(newSize.width,fixedWidth),height:height)
- 当textview的框架大小更改时,更新out表单元格的大小以匹配所包含textview大小的大小。 我们使用委托协议来告诉UITableViewController更新单元格高度。 我们传递计算出的框架高度,然后将其作为单元格的高度返回给UITableViewDelegate tableView(:heightForRowAt :)方法;
//保存新高度
EditorialCellHeight = newHeight
//禁用动画可以使我们达到预期的行为
UIView.setAnimationsEnabled(false)
/ *这些将导致表单元格的高度重新计算,
无需重新加载整个单元* /
tableView.beginUpdates()
tableView.endUpdates()
//重新启用动画
UIView.setAnimationsEnabled(true)
- 带有静态库的iOS应用程序仅在启动存档生成加载的临时文件时崩溃。 无法在debugging器中重现
- 将嵌套在容器视图控制器中的UINavigationController添加到UITabBarController
- 共享variables
- YouTube iFrame API在iPad上播放playVideo()命令后挂起缓冲状态
- 供应configuration文件不包括com.apple.security.application-group权利
- ios mapkit通过点击地图closures注释标注
- 创建私人可可荚的初学者指南
- 这是gzip膨胀方法中的错误吗?
- 何时使用__bridge_transfer和__bridge