UILabel 不会在 TableViewCell 中的初始加载时换行
UILabel does not wrap on initial load within TableViewCell
我正在创建一个基于聊天的应用程序,它使用 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 中的文本在初始加载时正确包装,而不仅仅是在重复使用单元格时?
问题很可能是您使用的框架宽度有误。使用 deqeueReusableCellWithIdentifier
创建的单元格没有与其关联的大小 class,因为它们没有父视图。因此,如果您的单元格中有限制,则尝试手动计算布局大小将无法正常工作。
您应该使用 dequeueReusableCellWithIdentifier:forIndexPath
使您的单元格出列
我正在创建一个基于聊天的应用程序,它使用 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 中的文本在初始加载时正确包装,而不仅仅是在重复使用单元格时?
问题很可能是您使用的框架宽度有误。使用 deqeueReusableCellWithIdentifier
创建的单元格没有与其关联的大小 class,因为它们没有父视图。因此,如果您的单元格中有限制,则尝试手动计算布局大小将无法正常工作。
您应该使用 dequeueReusableCellWithIdentifier:forIndexPath
使您的单元格出列