UILabel 上的奇怪行为与 StoryBoard 上的 \n

Posted

技术标签:

【中文标题】UILabel 上的奇怪行为与 StoryBoard 上的 \\n【英文标题】:Weird behavior on UILabel with \n on StoryBoardUILabel 上的奇怪行为与 StoryBoard 上的 \n 【发布时间】:2017-06-06 08:27:33 【问题描述】:

我想在UILabel 上添加换行符。在情节提要上使用\n根本不起作用。 这是一个例子。

添加标签

在 StoryBoard 上,我创建了 2 个 UILabel 并将其内容设置在专用字段中:

    Label 1\nhello\n 由 ALT+RETURN 创建

    Label 2\nhello 带有显式 \n

    然后我添加了第三个标签并在控制器上配置它,而不是在故事板上:

    label3.numberOfLines = 0 label3.text = "标签3\nhello"

上下文

这是一个全新的项目,在 Xcode 8 上。语言是 Swift 3.1 并且 AutoLayout 是关闭的。所以不能有任何外部库的干扰,也不能有 AutoLayout。

结果

这是渲染图。

结论

UILabel 在 StoryBoard 或代码源上使用时的行为是不一样的,这确实令人不安。当然,当你面对并解决了这个问题时,一切似乎都很清楚,因为答案是众所周知的。

使用UITextView 代替UILabel 可以轻松解决此问题。所以就目前而言,直到我更喜欢使用UITextView 在多行上显示简单文本,尽管UILabel 必须为此目的工作。

【问题讨论】:

@SahebRoy 首先,我完全理解这种情况。第二个 \n 在某些情况下在源代码中不起作用。我已经使用它多年了,我遇到了这种奇怪的行为,只对少数 UILabel 没有任何解释。对这种行为的搜索会在 SO 和其他网站上引发大量问题。所以 UILabel 确实有问题。 @SahebRoy 这个问题不是关于你的提议,但这超出了范围。 【参考方案1】:

在 UILabels 中你根本不能使用

\n

你必须使用

Alt + Enter

移动到下一行。

【讨论】:

应该是option + Enter【参考方案2】:

回车符 (\n) 和字符 \n 是有区别的。单数字符 \n 是一个回车符,正如您所看到的那样分割行。然而这两个字符 \ & n 只是代表两个不同的字符本身。

在 Interface Builder 中创建 Storyboard 时,您在 UILabel 中输入的字符都被计为单个字符,因此如果您键入 \n,您实际上是在输入字符“\”和字符“n”。因此,要输入特殊的单回车符 (\n),您必须使用 ALT+RETURN。

现在在代码中您可以更加灵活。当输入像“Line1\nLine2”这样的文本时,\n 被视为单个回车符,因此要输入字符 '\' 和 'n' 彼此相邻,您必须使用“Line1\nLine2”(双\ 表示单个 '\' 字符)。

因此,当它起作用时,您将在字符串中获得单个回车符 (\n),而当它不起作用时,您将获得两个单独的字符。

您没有提到 \n 不起作用时(在故事板之外)是如何添加的,但它必须作为两个单独的字符添加到字符串中。

举个例子:

let str1 = "12345\n67890
let str2 = "12345\\n67890
print (str1.characters.count) // prints 11
print (str2.characters.count) // prints 12

【讨论】:

感谢您的解释。这种行为仍然令人不安,因为 Storyboard 和代码之间存在差异。当然,经验会带来这些知识,但第一次这可能会浪费大量时间。即如果您复制/粘贴一些带有换行符的文本。对于我当前问题的问题,我仍在调查这就是为什么我没有添加详细信息。【参考方案3】:

在 UILabels 中你根本不能使用

\n

你必须使用

选项 + 回车

转到下一行。

【讨论】:

【参考方案4】: 故事板的新线:

按 Ctrl + Enter(在两个单词之间)

代码换行:

只需添加“\n”

【讨论】:

以上是关于UILabel 上的奇怪行为与 StoryBoard 上的 \n的主要内容,如果未能解决你的问题,请参考以下文章

调用 setNeedsDisplay 时的 Swift 奇怪行为

UISegmentedControl 在 UITableView Header 上的行为很奇怪

UITableViewController 中的 iPhone 奇怪行为

UIPickerView 自定义视图奇怪的行为

滚动时 UITableViewCell 的奇怪行为,UIButtons 消失

QMessageBoxes 在 OSX 中有非常奇怪的行为