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), у вас может не быть доступа.