繁体   English   中英

如何根据其中的UITextView的大小调整UITableViewCell的大小?

[英]How do I resize a UITableViewCell according to the size of a UITextView inside it?

我需要能够根据表格视图单元格中UITextView对象的高度从单元格中调整UITableViewCell的大小。 当用户在文本视图中键入更多字符时,文本视图需要增加高度,而表格视图单元格也需要增加高度以适应文本视图的高度。 我需要在没有UITableView.reloadData()的情况下执行此操作,因为当用户在其中键入更多字符时,我需要文本视图保持第一响应者的身份。

我试过使用NSLayoutConstraint.deactivate( :),NSLayoutConstraint.activate( :),contentView.updateConstraints(),contentView.updateConstraintsAsNeeded(),contentView.setNeedsUpdateConstraints(),contentView.layoutIfNeeded()和UITextView.sizeToFit()文本视图的高度和contentView上的高度的不同组合。

我没有得到它的工作。

我包括了用于表格视图单元格子类的代码。 我在尝试所有提到的代码的地方加了注释。

    import UIKit

    class TableViewCell: UITableViewCell {

        @IBOutlet weak var textView: UITextView!

        override func awakeFromNib() {
            super.awakeFromNib()

            textView.delegate = self
            textView.textContainer.lineBreakMode = .byWordWrapping
            textView.isScrollEnabled = false

        }

    }

    extension TableViewCell: UITextViewDelegate {

        func textView(_ textView: UITextView, shouldChangeTextIn range: NSRange, replacementText text: String) -> Bool {

            // !!! I tried the code here !!!

            return true

        }

    }

在表视图控制器中,我有以下代码:

        override func viewDidLoad() {
            super.viewDidLoad()

            tableView.rowHeight = 44
            tableView.rowHeight = UITableViewAutomaticDimension
            tableView.estimatedRowHeight = 44

        }

当我使用UITableView.reloadData()时,可以使表格视图单元格调整大小,但否则无法正常工作。

我已经查看了StackOverflow上的其他问题,但没有找到解决方案。

这有帮助

如何根据UITextView子视图的大小调整UITableViewCell的大小?

但是它以非预期的方式解决了问题。 我怀疑苹果打算解决此问题的方式与我尝试过的其他方式(即使用约束)有关。

我希望有人知道我该怎么做。 任何帮助表示赞赏。

由于您已经关闭了TableViewCelltextview的滚动行为,因此可以在何时调用TableViewCellview controller ,并在文本更改时调用它。

 protocol TextFieldUpdateDelegate {
     func textFieldDidChangeText(_ textview: UITextView)
 }

现在,在您的视图控制器的委托一致性中。

func textFieldDidChangeText(_ textView: UITextView) {
     tableView.beginUpdate()
     tableView.endUpdate()
}

根据文档

您还可以在不重新加载单元格的情况下,使用此方法以及endUpdates()方法来对行高的变化进行动画处理。

并且这应该根据textView中包含的文本来更新tableview单元格的高度。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM