swift - 使 UITableView Header 在用户输入单元格时自动调整大小
问题描述
此 UI 允许用户在空白处输入答案(TableViewCells),并且标题将预览最终答案,其中空白填充到原始问题中。
比如这里的问题提示应该是“构成水分子的元素是(____)和(____)”。
但用户界面显示:
如您所见,标题视图正在截断内容。我希望视图调整大小以适应那里的任何文本,即使用户键入并且分机变得更长。这是用于创建标题视图的 TableViewController 代码:
override func tableView(_ tableView: UITableView, viewForHeaderInSection section: Int) -> UIView? {
let cell = tableView.dequeueReusableCell(withIdentifier: "OPCell") as! WhatTheBlankOriginalPostTableViewCell
cell.OriginalPostLabel.text = WhatTheBlankUtility.PostText(post: (post?.content.text)!)
opCell = cell
let view = UIView()
view.addSubview(cell)
let margins = view.layoutMarginsGuide
cell.leadingAnchor.constraint(equalTo: margins.leadingAnchor, constant: 8).isActive = true
cell.trailingAnchor.constraint(equalTo: margins.trailingAnchor, constant: 8).isActive = true
cell.topAnchor.constraint(equalTo: margins.topAnchor, constant: 16).isActive = true
cell.bottomAnchor.constraint(equalTo: margins.bottomAnchor, constant: 16).isActive = true
return view;
}
请注意,我包装了标题视图(最初是一个单元格,自动调整大小并且工作正常!但是每当它更新大小时 - 我使用
Tableview.beginUpdates()
Tableview.endUpdates()
如果你向下滚动太远,整个 tableview 会抖动,如果你向下滚动太多,比如空白 20,标题视图就会消失。我看到的理论是,因为我返回了 TableViewCell 而不是 UITableViewHeaderFooterView,当tableview 不再认为单元格是可见的,它会被破坏)在视图中。这是为了解决我在括号中提到的问题。原谅我糟糕的思想组织。
我还尝试通过将单元格内部固定到代码中的视图边界来调整标题视图的大小(自动约束)。没有运气 - 当用户键入并且字符串变长时,标题视图的大小没有变化。
解决方案
如果您创建一个新视图并在 中添加约束viewForHeaderInSection
,则会导致奇怪的行为。对于初学者,每次viewForHeaderInSection
调用它都会添加新的约束。由于在此方法中添加约束之前不会删除约束,因此会导致重复约束,我只能想象那将是一场多么噩梦。一个简单的解决方案是只返回cell.contentView
您的viewForHeaderInSection
方法。
推荐阅读
- django - 如何将内联表单集值分配给多对多字段 - django
- javascript - Content-Disposition 未包含在 HttpClient 中获得的响应中的原因是什么?
- excel - VBA:在为单元格赋值之前验证条件的最佳方法是什么
- google-cloud-platform - 权限被拒绝(公钥)。错误:退出并返回代码 [255]
- reactjs - 第一次点击时状态为空白
- r - 大括号中右侧的 magrittr 管道给出错误
- maven - 为什么 Gradle 无法从 Maven 中央存储库解析 org.connectbot.jbcrypt:jbcrypt:1.0.0?
- javascript - 使用 jest mockImplementation 在 typescript 中模拟自定义钩子
- node.js - 带有 Fastify 的 NestJs 在 app.listen() 之后不执行代码
- javascript - Adobe PDF 文档不允许 Javascript 在移动设备上进行计算 (Android / iOS)