换行换行符不适用于 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 [重复]

file_exists 或 getimagesize 仅适用于本地、绝对文件路径,但不适用于 PHP 中的 URL

调整UILabel的大小以适应Word Wrap