当我使用 UISemanticContentAttributeForceRightToLeft
时,我遇到了使用 NSAttributedStrings
和 NSParagraphStyle
的 UILabels 的问题。
我有一个演示应用程序,UI 上只有 2 个标签。
它们具有前导和尾随约束。
我正在 AppDelegate 中使用
使应用程序从右到左UIView.appearance().semanticContentAttribute = .forceRightToLeft
我只是使用以下代码配置标签
let labelAText = "Foo"
let mutAttrString = NSMutableAttributedString(string: labelAText)
let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.alignment = .natural
paragraphStyle.baseWritingDirection = .natural
mutAttrString.setAttributes([NSAttributedStringKey.paragraphStyle: paragraphStyle.copy()], range: NSMakeRange(0, labelAText.count))
labelA.attributedText = mutAttrString
labelB.text = "Bar"
结果如下:
[
labelB (Bar)
按预期工作,但 labelA (Foo)
未按预期工作。如果我只是删除 NSParagraphStyle
它就会开始工作。请注意,我什至没有更改它的任何内容,但仅仅使用它就会弄乱对齐方式。
有什么想法可能导致这种情况吗?
最佳答案
NSMutableParagraphStyle有属性(property)baseWritingDirection (枚举 NSWritingDirection )。将其设置为rightToLeft
试试这个
paragraphStyle.baseWritingDirection = NSWritingDirection.rightToLeft
编辑:(希望这对您有帮助)
If the value of property (baseWritingDirection) is NSWritingDirectionNaturalDirection, the receiver resolves the writing direction to either NSWritingDirectionLeftToRight or NSWritingDirectionRightToLeft, depending on the direction for the user’s language preference setting.
class func defaultWritingDirection(forLanguage languageName: String?) -> NSWritingDirection
语言名称:以 ISO 语言区域格式指定的语言。可以为 nil 以返回从用户的默认数据库派生的默认书写方向。
使用 languageName = "ar"的解决方案
@IBOutlet weak var labelA: UILabel!
let labelAText = "Foo"
let mutAttrString = NSMutableAttributedString(string: "Foo")
let paragraphStyle = NSMutableParagraphStyle()
//paragraphStyle.alignment = .natural
paragraphStyle.baseWritingDirection = NSParagraphStyle.defaultWritingDirection(forLanguage: "ar")
mutAttrString.setAttributes([NSAttributedStringKey.paragraphStyle: paragraphStyle], range: NSMakeRange(0, labelAText.count))
labelA.attributedText = mutAttrString
以下是语言列表:Codes for the Representation of Names of Languages
注意:使用 ISO 639-1
代码作为语言。标签文本的方向取决于语言的自然方向。
这是结果:
这份 Apple 文档将为您提供帮助 - Supporting Right-to-Left Languages
关于ios - UILabel 不适用于从右到左的 NSAttributedString + NSParagraphStyle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48326178/