该用户界面允许用户在空白处(TableViewCells)输入答案,标题将预览最终答案,并在原始问题中填入空白。
例如,此处的问题提示应为“组成水分子的元素是(_____)和(_____)”。
但是用户界面显示:
如您所见,标头视图正在截断内容。我希望视图可以调整大小以适合其中的任何文本,即使用户键入且ext变得更长。这是用于创建标题视图的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
。