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 奇怪行为