换行换行符不适用于 UILabel 仅适用于特定文本字符串
Posted
技术标签:
【中文标题】换行换行符不适用于 UILabel 仅适用于特定文本字符串【英文标题】:Word Wrap Line Break not working in UILabel only for specific text Strings 【发布时间】:2016-06-28 20:18:09 【问题描述】:我有一个UITableViewController
,带有一个带有三个标签和一个按钮的自定义原型单元。中间标签(称为descriptionLabel
)是一个多行标签,其中 Word Wrap 作为“换行符”选项,在属性检查器中设置了 0 行。
如果我将descriptionLabel.text
属性设置为分配文字String
,则自动换行选项可以正常工作,如下图所示:
Cell with Word Wrap working
问题是descriptionLabel
的文本来自一个对象。该对象从网络服务下载并存储在本地,也用于填充单元格的所有其他标签。
但是,当我将对象属性字符串分配给descriptionLabel
的文本 (cell.descriptionLabel.text = monthlyPaymentType.detail
) 时,自动换行不起作用,如下图所示:
Cell with Word Wrap NOT working
在这种情况下,“cobrado”是一个单词,但它是字符换行而不是单词换行。
这很奇怪,因为如果我复制print(monthlyPaymentType.detail)
的结果,粘贴为文字字符串并将其分配给cell.descriptionLabel.text
,则自动换行选项也不起作用。
但是,如果我手动键入与 print(monthlyPaymentType.detail)
内容完全相同的文字字符串并将其分配给 cell.descriptionLabel.text
,则自动换行选项确实起作用。
配置标签时我做错了什么吗?我的对象中存储的字符串有问题吗?
【问题讨论】:
【参考方案1】:问题在于来自服务器并存储在对象中的字符串中的空格是 Unicode Non-Breaking Spaces (U+00A0)。当这些字符串分配给 UILabel
text
属性时,非分隔空格不被视为单词分隔符。
为了解决这个问题,我使用 String
的方法 stringByReplacingOccurrencesOfString("\u00A0", withString: "\u0020")
将出现的 U+00A0 字符替换为常见的 Unicode 空白 (U+0020)。
【讨论】:
以上是关于换行换行符不适用于 UILabel 仅适用于特定文本字符串的主要内容,如果未能解决你的问题,请参考以下文章
AutoLayout 适用于 UIView 但不适用于 UILabel。为啥?
UITapGestureRecognizer 适用于 UIImageView 但不适用于 UILabel
如何在适用于 IE7、IE8 和 FF 的 jqGrid 上实现自动换行
JQuery $(this).text().length 仅适用于 IE,不适用于 Chrome、IE 或 FF [重复]