iOS RTL - неправильное отображение английского языка внутри строки RTL

iOS-приложение, мы должны отображать новости, поступающие с сервера. используется UIlabel

  • Все отлично, когда предложение только на одном языке, без учета раскладки (мы переключаем раскладку RTL на LTR для разных языков, включая арабский, иврит)
  • Когда внутри языка LTR у нас есть слова RTL, они нарушают структуру предложения (см. рисунок, BTN должен быть в начале строки, но он перескочил в конец) Английские слова в языке RTL Есть идеи, как это решить? Заранее спасибо :)

person Alexey Abraham    schedule 28.05.2016    source источник


Ответы (5)


Apple использует двунаправленный алгоритм Unicode для представления текста. Если первым символом в строке является LTR, алгоритм рассматривает представление остальной части строки как LTR. Если вы заранее знаете язык строки RTL, вы можете использовать юникод ‏ и ‬ для принудительного выравнивания RTL.

Цель-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")
person Pichirichi    schedule 14.02.2018
comment
Мне показалось, что это сработало, соответствующую документацию Apple по этому поводу можно найти здесь: developer.apple.com/library/archive/documentation/MacOSX/ - person jonhurlock; 12.04.2019

Вот решение @Pichirichi для swift 5.2:

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

"u200E\("your string with LTR content")\u{202c}"
person Ali Pishvaee    schedule 18.04.2020

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

Решил проблему

person Alexey Abraham    schedule 28.05.2016
comment
это не сработало для меня. Моя строка такая self.testLabel.text = @"رقم HELLO سجل"; - person Adeel Ur Rehman; 31.10.2016

Свифт 5:

extension String {
    
    func forceUnicodeRTL() -> String {
        return "\u{200F}\(self)\u{200E}"
    }
}
person Farshid roohi    schedule 19.06.2021

Немного полезной информации отсюда:

[[self label] setTextAlignment:NSTextAlignmentNatural];

Выравнивание текста AutoLayout + RTL + UILabel

Но иногда это все еще не работает, как ожидалось

person Alexey Abraham    schedule 28.05.2016