繁体   English   中英

UILabel无法与NSAttributedString + NSParagraphStyle一起使用,从右向左

[英]UILabel not working with NSAttributedString + NSParagraphStyle for Right-To-Left

我在使用NSParagraphStyle时将NSAttributedStringsNSParagraphStyle使用的UISemanticContentAttributeForceRightToLeft

我有一个演示应用程序,UI上只有两个标签。

它们具有前导和尾随约束。

两个标签

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

结果是:

[ 标签错误[2]

labelB (Bar)正常工作,但labelA (Foo)无效。 如果我只是删除NSParagraphStyle它将开始工作。 请注意,我什至没有更改任何内容,只是通过使用它就弄乱了对齐方式。

有什么想法可能导致这种情况?

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

尝试这个

paragraphStyle.baseWritingDirection = NSWritingDirection.rightToLeft


编辑 :(可能对您有帮助)

如果属性(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

这是语言列表:语言名称表示的代码

注意:语言请使用ISO 639-1代码。 标签文本的方向取决于语言的自然方向。

结果如下:

在此处输入图片说明


此Apple文档将为您提供帮助- 支持从右到左的语言

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM