UILabel不会在TableViewCell中的初始加载上换行



我正在创建一个基于聊天的应用程序,该应用程序使用UITableView来保存对话中的所有消息。为了创建聊天气泡,我有一个包装视图(wrapView),它被限制在TableViewCell的顶部,底部,右侧和左侧。作为子视图,我有一个UILabel,其中包含发送的消息。我对UILabel使用了preferredMaxLayoutWidth,以确保标签中的文本不会超出父视图。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 中的文本在初始加载时正确换行,而不仅仅是在重用单元格时?

问题可能是您使用的框架宽度错误。使用deqeueReusableCellWithIdentifier创建的单元格没有与之关联的大小类,因为它们没有父视图。因此,如果单元格中有约束,则尝试手动计算布局大小将无法正常工作。

您应该使用dequeueReusableCellWithIdentifier:forIndexPath将单元格取消排队

最新更新