我正在创建一个基于聊天的应用,它使用UITableView
来保存对话中的所有消息。为了创建聊天气泡,我有一个封装视图(wrapView),它被限制在TableViewCell的顶部,底部,右侧和左侧。作为子视图,我有一个UILabel
来保存发送的消息。我使用preferredMaxLayoutWidth
作为UILabel
,以确保标签内的文字不会超出父视图。 UILabel
的行数也设置为0.我在cellForRowAtIndexPath
函数中设置了以下参数:
// Get the cell
let cell = tableView.dequeueReusableCellWithIdentifier("LeftBubbleText") as! LeftTextTableViewCell
// Set the message
cell.messageLabel.text = message
// Set the message label's max width
cell.messageLabel.preferredMaxLayoutWidth = cell.wrapView.frame.width - 16
首次加载对话时,UILabel
内的文字未正确包装。它在包装器视图的末尾被截断。但是当单元格在屏幕上滚动然后重新出现时,文本在重复使用单元格后会被包裹得很好。
如何确保UILabel中的文本在初始加载时正确包装,而不仅仅是在重用单元格时?
答案 0 :(得分:0)
问题可能是你使用的帧宽是错误的。使用deqeueReusableCellWithIdentifier
创建的单元格没有与之关联的大小类,因为它们没有父视图。因此,如果您的单元格中存在约束,则尝试手动计算布局大小将无法正常工作。
您应该使用dequeueReusableCellWithIdentifier:forIndexPath
将您的单元格出列