UILabel不使用NSAttributedString + NSParagraphStyle从右到左

时间:2018-01-18 16:37:56

标签: ios swift uilabel right-to-left nsparagraphstyle

我在使用NSAttributedStrings时使用NSParagraphStyleUISemanticContentAttributeForceRightToLeft的UIL用户遇到问题。

我有一个只有2个标签的演示应用程序。

他们有前导和尾随约束。

The two labels

我使用

在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"

结果如下:

[wrong label[2]

labelB (Bar)按预期工作,但labelA (Foo)并非如此。如果我只是移除NSParagraphStyle它就开始工作了。请注意,我甚至没有更改任何内容,但只是通过使用它,它会弄乱对齐。

有关可能导致此问题的任何想法?

1 个答案:

答案 0 :(得分:0)

NSMutableParagraphStyle有一个属性baseWritingDirection(枚举NSWritingDirection)。将其设置为rightToLeft

试试这个

paragraphStyle.baseWritingDirection = NSWritingDirection.rightToLeft


修改 :(可以帮助您)

  

如果property(baseWritingDirection)的值是NSWritingDirectionNaturalDirection,则接收方将写入方向解析为NSWritingDirectionLeftToRight或NSWritingDirectionRightToLeft,具体取决于用户语言首选项设置的方向。

class func defaultWritingDirection(forLanguage languageName: String?) -> NSWritingDirection

languageName :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代码表示语言。标签文本的方向取决于语言的自然方向。

结果如下:

enter image description here


Apple文档将为您提供帮助 - Supporting Right-to-Left Languages