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))
}
}
答案 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)