1

为此我研究了很多教程但我无法找到解决我的问题的方法

我想在表格单元格上显示 textView。并且 Cell 应该随着用户在 textView 中输入的文本展开。

我发现有两种方法可以做到这一点

第一:-

self.tableView.rowHeight = UITableViewAutomaticDimension;
    self.tableView.estimatedRowHeight = 30;


func textViewDidChange(_ textView: UITextView!, for indexPath: IndexPath!) {
    self.presenter?.valueChanged(section: indexPath.section, value: textView.text)
    isChanged = true

    self.tableView.beginUpdates()
    self.tableView.endUpdates()
}
Make the table view to adjust height automatically. But in this case when there is no data to display in cellForRow at index path then textview height is automatically adjusted to 0 and i was not able to select the text view.

第二种方式:-

删除自动尺寸码

// MARK: TextViewTableViewCellDelegate
func textViewDidChange(_ textView: UITextView!, for indexPath: IndexPath!) {
    self.presenter?.valueChanged(section: indexPath.section, value: textView.text)
    isChanged = true

    self.tableView.beginUpdates()
    self.tableView.endUpdates()
}

override func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    var ret = DEFAULT_CELL_HEIGHT

    if let cell = tableView.dequeueReusableCell(withIdentifier: SECTION_TYPE_FREEFORM) as? TextViewTableViewCell {
        cell.textView.text = self.presenter?.cellBody(section: indexPath.section)
        cell.textView.sizeToFit()

        let width = self.view.frame.size.width - HORIZONTAL_PADDING
        let calculatedHeight = cell.textView.sizeThatFits(CGSize(width: width, height: CGFloat(MAXFLOAT))).height + 10
        if(calculatedHeight > ret) {
            ret = calculatedHeight
        }
    }

    return ret
}

但在此我检查了然后我在 heightForRowAtIndexPath 方法中创建单元格,然后 textview 高度不合适。并且自动调整高度并不完全有效。

请提出相同的解决方案。提前致谢。

4

2 回答 2

3

向您的文本视图添加最小高度约束并使用第一种方法怎么样?只要确保你的滚动UITextView被禁用。因为您在第一个解决方案中遇到的唯一问题是单元格高度太小,而里面什么都没有......

否则你的代码看起来很不错,可能会给你流畅的动画。

于 2018-04-19T05:18:54.560 回答
3
func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
  return UITableViewAutomaticDimension 
}

func tableView(_ tableView: UITableView, estimatedHeightForRowAt indexPath: IndexPath) -> CGFloat { 
  return yourinitialheight 
}

移除高度约束,并设置顶部、底部、前导和尾随约束。

于 2018-04-19T05:38:48.013 回答