Cell Swift中的UITextView

时间:2017-04-19 03:20:34

标签: ios swift swift3 uitextview

我几个小时来一直在搞乱这些限制,无法解决这个问题。 我需要在文本视图中使用动态单元格高度。

enter image description here enter image description here

正如你可以看到它重叠我的时间戳。截至目前,我对时间戳有零(无)限制。我已经尝试了所有可能的组合来完成这项工作,我无法得到它。

也在使用

   override func viewDidLoad() {
        super.viewDidLoad()



        //TableView Cell word wrap (Dynamic Text)
        self.tableView.dataSource = self
        self.tableView.delegate = self
        self.tableView.estimatedRowHeight = 78
        self.tableView.rowHeight = UITableViewAutomaticDimension

3 个答案:

答案 0 :(得分:5)

适用于Swift 3.1,4.0

通过设置约束和UITableViewAutomaticDimensions

来实现

第1步:

enter image description here

第2步:

enter image description here

第3步:

enter image description here

第4步:

删除UITextView

的滚动

enter image description here

第5步:

添加以下代码,

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

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

    return UITableViewAutomaticDimension
}

注意:

如果您有UILabel,请从上面的解决方案和UITextView替换UILabellabel.numberOfLines = 0

enter image description here

<强>输出:

enter image description here

答案 1 :(得分:1)

如果您的单元格高度取决于文本大小,请遵循以下步骤:在ViewController.swift中添加方法

    func calculateHeight(inString:String) -> CGFloat {
         let messageString = inString
         let attributes : [String : Any] = [NSFontAttributeName : UIFont.systemFont(ofSize: 15.0)]

     let attributedString : NSAttributedString = NSAttributedString(string: messageString, attributes: attributes)

     let rect : CGRect = attributedString.boundingRect(with: CGSize(width: 222.0, height: CGFloat.greatestFiniteMagnitude), options: .usesLineFragmentOrigin, context: nil)

      let requredSize:CGRect = rect
      return requredSize.height
}

设置文本标签的宽度然后调用此函数:

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
            heightOfRow = self.calculateHeight(inString: conversations[indexPath.row].description)

            return (heightOfRow + 60.0)
    }

对于基本单元格:

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

此功能不适用于自定义单元格。

如果您的单元格高度取决于图像高度,则返回图像高度+ someFloatValueAcordingToYourChoice。

希望它能奏效。

答案 2 :(得分:0)

timeStamp与消息之间的用户垂直间距,并将常量设置为&gt; = 2