.Natural 的 NSTextAlignment 逆
NSTextAlignment inverse of .Natural
我知道通过使用 NSTextAlignment.Natural
可以让标签使用给定语言的默认右移方向绘制内容,这有助于本地化,允许标签从左到右绘制文本在像 english/spanish/etc... 这样的语言中是从右到左,在像阿拉伯语这样的语言中是从右到左。现在我的问题是,我想在与 .Natural 相反的方向绘制标签,因此在从左到右的语言中,文本应右对齐,而在从右到左的语言中,文本应左对齐.
我找不到为此的 NSTextAlignment 枚举选项。所以我希望有人能给我一些关于如何完成这个的建议?
非常感谢!
我认为没有文本对齐方式 "unnatural"。
但是您可以使用 +characterDirectionForLanguage:
从 NSLocale
检索自然语言方向。有了这个,你就可以自己设置对齐了。
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!
天知道为什么 Apple 不提供 NSTextAlignmentNaturalInverse 或等效项。
这是我们在生产应用程序中用来实现此目的的代码...
+ (BOOL)isLanguageLayoutDirectionRightToLeft
{
return [UIApplication sharedApplication].userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionRightToLeft;
}
someLabel.textAlignment = [UIApplication isLanguageLayoutDirectionRightToLeft] ? NSTextAlignmentLeft : NSTextAlignmentRight;
谢谢@Oliver,这是我最终在 swift 中使用的内容:
扩展
extension NSTextAlignment {
static var invNatural: NSTextAlignment {
return UIApplication.shared.userInterfaceLayoutDirection == .rightToLeft ? .left : .right
}
}
用法
myLabel.textAlignment = .invNatural
在 Apple 的国际化和本地化指南中,在 Supporting Right-to-Left Languages 下,他们指出应该使用 UIView
的 semanticContentAttribute
来获取布局方向。所以你可以实现类似下面的东西:
extension UIView {
var isRightToLeftLayout: Bool {
return UIView.userInterfaceLayoutDirection(for: self.semanticContentAttribute) == .rightToLeft
}
}
这样做的好处是不依赖 UIApplication
之类的东西,这取决于您是否在使用扩展程序(例如 Today 小部件),您可能无法访问。
我知道通过使用 NSTextAlignment.Natural
可以让标签使用给定语言的默认右移方向绘制内容,这有助于本地化,允许标签从左到右绘制文本在像 english/spanish/etc... 这样的语言中是从右到左,在像阿拉伯语这样的语言中是从右到左。现在我的问题是,我想在与 .Natural 相反的方向绘制标签,因此在从左到右的语言中,文本应右对齐,而在从右到左的语言中,文本应左对齐.
我找不到为此的 NSTextAlignment 枚举选项。所以我希望有人能给我一些关于如何完成这个的建议?
非常感谢!
我认为没有文本对齐方式 "unnatural"。
但是您可以使用 +characterDirectionForLanguage:
从 NSLocale
检索自然语言方向。有了这个,你就可以自己设置对齐了。
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!
天知道为什么 Apple 不提供 NSTextAlignmentNaturalInverse 或等效项。
这是我们在生产应用程序中用来实现此目的的代码...
+ (BOOL)isLanguageLayoutDirectionRightToLeft
{
return [UIApplication sharedApplication].userInterfaceLayoutDirection == UIUserInterfaceLayoutDirectionRightToLeft;
}
someLabel.textAlignment = [UIApplication isLanguageLayoutDirectionRightToLeft] ? NSTextAlignmentLeft : NSTextAlignmentRight;
谢谢@Oliver,这是我最终在 swift 中使用的内容:
扩展
extension NSTextAlignment {
static var invNatural: NSTextAlignment {
return UIApplication.shared.userInterfaceLayoutDirection == .rightToLeft ? .left : .right
}
}
用法
myLabel.textAlignment = .invNatural
在 Apple 的国际化和本地化指南中,在 Supporting Right-to-Left Languages 下,他们指出应该使用 UIView
的 semanticContentAttribute
来获取布局方向。所以你可以实现类似下面的东西:
extension UIView {
var isRightToLeftLayout: Bool {
return UIView.userInterfaceLayoutDirection(for: self.semanticContentAttribute) == .rightToLeft
}
}
这样做的好处是不依赖 UIApplication
之类的东西,这取决于您是否在使用扩展程序(例如 Today 小部件),您可能无法访问。