iOS RTL - 在RTL字符串中不正确地显示英语

时间:2016-05-28 09:59:23

标签: ios uilabel hebrew arabic-support

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

  • 当句子只用一种语言而不考虑布局时,一切都很完美(我们将布局RTL切换为不同语言的LTR,包括阿拉伯语,希伯来语)
  • 当在LTR语言里面我们有RTL词时,他们打破了句子结构(见图,BTN必须在行的开头,但它跳到了最后) English words inside RTL language 不知道怎么解决这个问题?在此先感谢:)

5 个答案:

答案 0 :(得分:4)

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

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

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

答案 1 :(得分:3)

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

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

"u200E\("your string with LTR content")\u{202c}"

答案 2 :(得分:2)

  "arabic text \u200E english text \u200F arabic text \u200E english text"

解决了问题

答案 3 :(得分:0)

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

[[self label] setTextAlignment:NSTextAlignmentNatural];

AutoLayout + RTL + UILabel text alignment

但有时它仍未按预期工作

答案 4 :(得分:0)

斯威夫特 5:

extension String {
    
    func forceUnicodeRTL() -> String {
        return "\u{200F}\(self)\u{200E}"
    }
}