如何自动计算tableview单元格高度和标签高度

时间:2017-04-26 08:02:41

标签: ios iphone uitableview height cell

抱歉,我是斯威夫特的初学者。 我想得到聊天泡泡视图,但我无法让它整洁。
如何使tableviewcell自动更新高度
非常感谢!

view like this

last two line is emoji

Viewcontroller.swift

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat {
    let content = contents[indexPath.row] as Message
    let contentWidth:CGFloat = UIScreen.main.bounds.width*0.590
    let label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: contentWidth, height: CGFloat.greatestFiniteMagnitude))
    label.numberOfLines = 0
    label.font = fontTalkContent
    label.text = content.content
    label.sizeToFit()
    var uiHeight:CGFloat = (label.frame.height <= defaultChatroomIconHeight) ? defaultContentHeight : label.frame.height

}

class ChatContentTableViewCell: UITableViewCell {
var labelContent:UILabel = { ()->UILabel in
    let ui:UILabel = ChatContent()
    ui.font = defaultTextFont
    ui.numberOfLines = 0
    ui.lineBreakMode = NSLineBreakMode.byWordWrapping
    ui.layer.cornerRadius = dafaultLabelContentRadius
    ui.layer.masksToBounds = true
    ui.isHidden = false
    return ui
}()

override func layoutSubviews()
{
    super.layoutSubviews()
     bulidLoad()

}
func bulidload() {

    labelContent.frame = CGRect(x: 0, y: 0, width: contentWidth, height: CGFloat.greatestFiniteMagnitude)

    labelContent.sizeToFit()

    addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:[labelContent]-padding-[icon]-padding-|", options: [], metrics: metrics, views: views))
            addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "H:[labelDatetime]-padding-[icon]-padding-|", options: [], metrics: metrics, views: views))
            addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-topPadding-[labelContent]-contentAndDatePadding-[labelDatetime]-dateAndBottomPaddding-|", options: [], metrics: metrics, views: views))
            addConstraints(NSLayoutConstraint.constraints(withVisualFormat: "V:|-topPadding-[icon]", options: [], metrics: metrics, views: views))
}
}

class ChatContent:UILabel {
override init(frame: CGRect) {
    super.init(frame:frame)
    translatesAutoresizingMaskIntoConstraints = false
    numberOfLines = 0
    isUserInteractionEnabled = true
}

required init?(coder aDecoder: NSCoder) {
    fatalError("init(coder:) has not been implemented")
}

override func drawText(in rect: CGRect) {
    let insets: UIEdgeInsets = UIEdgeInsets(top: defaultContentPadding, left: defaultPadding, bottom: defaultContentPadding, right: defaultPadding)

    super.drawText(in: UIEdgeInsetsInsetRect(rect, insets))
}
}

4 个答案:

答案 0 :(得分:1)

使用UITableViewAutomaticDimension

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

答案 1 :(得分:0)

1.设置标签约束

2.make no of lines(label)等于Zero。

3.在viewDidLoad():

中添加这些代码
self.tableView.estimatedRowHeight = 88.0
self.tableView.rowHeight = UITableViewAutomaticDimension

答案 2 :(得分:0)

tableView.estimatedRowHeight = 60 

tableView.rowHeight = UITableViewAutomaticDimension

不要忘记将标签noOfLines设置为0的单元格

答案 3 :(得分:0)

如果您想根据内容动态指定高度,请按照以下说明操作...

对于UITableViewCell的动态大小,需要两件事。

  1. 在表格视图单元格内设置视图的右边约束(主要包括为视图提供正确的顶部,底部和尾部约束)

  2. viewDidLoad()

    中调用TableView的这些属性
     tableView.rowHeight = UITableViewAutomaticDimension
    
     tableView.estimatedRowHeight = 80 //assign as per your requirements 
    
  3. 有关详细信息,请参阅此Link1Link2

    希望它对你有所帮助:)。