NSTextAlignment обратный. Естественный

Я понимаю, что, используя NSTextAlignment.Natural, вы позволяете метке рисовать его содержимое с помощью правильного направления по умолчанию для заданного языка, что помогает кучам с локализацией, позволяя ярлыку рисовать текст слева направо на таких языках, как английский/испанский/и т.д., и справа налево на таких языках, как арабский. Теперь мой вопрос заключается в том, что я хочу, чтобы метка рисовала в противоположном направлении. Естественно, поэтому в левом правильном языке текст должен быть выровнен справа и справа налево, он должен выровняться влево,

Я не могу найти опцию перечисления NSTextAlignment для этого. так что я надеялся, что кто-нибудь даст мне несколько советов о том, как это сделать?

Большое спасибо!

Ответ 1

Небеса знают, почему Apple не предлагает NSTextAlignmentNaturalInverse или эквивалент.

Вот код, который мы используем для достижения этого в нашем приложении для создания...

+ (BOOL)isLanguageLayoutDirectionRightToLeft
{
    return [UIApplication sharedApplication].userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionRightToLeft;
}

someLabel.textAlignment = [UIApplication isLanguageLayoutDirectionRightToLeft] ? NSTextAlignmentLeft : NSTextAlignmentRight;

Ответ 2

Спасибо @Oliver, вот что я в итоге использовал в быстром:

Расширение

extension NSTextAlignment {
    static var invNatural: NSTextAlignment {
        return UIApplication.shared.userInterfaceLayoutDirection == .rightToLeft ? .left : .right
    }
}

Использование

myLabel.textAlignment = .invNatural

Ответ 3

Я не думаю, что есть выравнивание текста "неестественно".

Но вы можете получить направление естественного языка от NSLocale с помощью +characterDirectionForLanguage:. После этого вы можете установить настройку самостоятельно.

NSLocale *locale = [NSLocale currentLocale];
UInt dir = [NSLocale characterDirectionForLanguage:locale.localeIdentifier];
NSLog(@"%d", dir); // returns 1 for left-to-right on my computer (German, de_DE) Hey, that should be ksh_DE!

Ответ 4

В Руководстве по интернационализации и локализации Apple в разделе " Поддержка языков справа налево" они указывают, что получение направления макета должно выполняться с использованием UIView semanticContentAttribute. Таким образом, вы можете реализовать что-то вроде следующего:

extension UIView {
    var isRightToLeftLayout: Bool {
        return UIView.userInterfaceLayoutDirection(for: self.semanticContentAttribute) == .rightToLeft
    }
}

Это имеет то преимущество, что не полагается на такие вещи, как UIApplication, к которым, в зависимости от того, работаете ли вы над расширением или нет (например, виджет Today), у вас может не быть доступа.