7

iOS 应用程序,我们要显示来自服务器的新闻。使用 UIlabel

  • 当他的句子只使用一种语言而不考虑布局时,一切都是完美的(我们正在将布局 RTL 切换到 LTR 以用于不同的语言,包括阿拉伯语、希伯来语)
  • 当在 LTR 语言中我们有 RTL 词时,它们会破坏句子结构(见图,BTN 必须在行首,但它跳到了最后) RTL 语言中的英语单词 知道如何解决这个问题吗?提前致谢 :)
4

5 回答 5

12

Apple 正在使用“Unicode 双向算法”来呈现文本。如果字符串中的第一个字符是 LTR,则算法将字符串其余部分的表示视为 LTR。如果您事先知道字符串 RTL 的语言,您可以使用 unicode \u200F 和 \u202c 来强制 RTL 对齐。

Objective-C

[NSString stringWithFormat:@"\u200F%@\u202c", @"your string with RTL content"]

[NSString stringWithFormat:@"\u200E%@\u202c", @"your string with LTR content"]

迅速

String(format: "\u200F%@\u202c", "your string with RTL content")

String(format: "\u200E%@\u202c", "your string with LTR content")
于 2018-02-14T13:41:04.530 回答
4

这是 swift 5.2 的@Pichirichi 解决方案:

"\u{200F}\("your string with RTL content")\u{202c}"

"u200E\("your string with LTR content")\u{202c}"
于 2020-04-18T08:12:52.410 回答
2
  "arabic text \u200E english text \u200F arabic text \u200E english text"

解决了问题

于 2016-05-28T14:59:35.833 回答
1

斯威夫特 5:

extension String {
    
    func forceUnicodeRTL() -> String {
        return "\u{200F}\(self)\u{200E}"
    }
}
于 2021-06-19T07:06:51.037 回答
0

这里的一些信息很有帮助:

[[self label] setTextAlignment:NSTextAlignmentNatural];

AutoLayout + RTL + UILabel 文本对齐

但有时它仍然无法按预期工作

于 2016-05-28T10:18:21.273 回答