该用户界面允许用户在空白处(TableViewCells)输入答案,标题将预览最终答案,并在原始问题中填入空白。

例如,此处的问题提示应为“组成水分子的元素是(_____)和(_____)”。

但是用户界面显示:

swift - 当用户在单元格中键入内容时,使UITableView Header自动调整大小-LMLPHP

如您所见,标头视图正在截断内容。我希望视图可以调整大小以适合其中的任何文本,即使用户键入且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

08-05 21:59
查看更多