Ios UILabel不使用NSAttributedString+;从右到左的NSParagraphStyle

Ios UILabel不使用NSAttributedString+;从右到左的NSParagraphStyle,ios,swift,uilabel,right-to-left,nsparagraphstyle,Ios,Swift,Uilabel,Right To Left,Nsparagraphstyle,当我使用uisemanticContentAttributeForecRightToLeft时,使用nsAttributedString和NSParagraphStyle的UILabel出现问题 我有一个演示应用程序,UI上只有两个标签 它们具有前导和尾随约束 我正在使用从右到左的AppDelegate制作应用程序 UIView.appearance().semanticContentAttribute = .forceRightToLeft 我只是用下面的代码配置标签 let labelA

当我使用
uisemanticContentAttributeForecRightToLeft
时,使用
nsAttributedString
NSParagraphStyle
的UILabel出现问题

我有一个演示应用程序,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"
其结果是:

[

labelB(Bar)
可以正常工作,但是
labelA(Foo)
不能正常工作。如果我删除
NSParagraphStyle
它就会开始工作。请注意,我甚至没有对它做任何更改,只是使用它,它会破坏对齐

您认为是什么原因导致了这种情况吗?

有一个属性(枚举)。请将其设置为

试试这个

paragraphStyle.baseWritingDirection = NSWritingDirection.rightToLeft

编辑:(这对您有帮助吗)

如果属性(baseWritingDirection)的值为NSWritingDirectionNaturalDirection,则接收方根据用户语言首选项设置的方向,将写入方向解析为NSWritingDirectionLeftToRight或NSWritingDirectionRightToLeft

languageName:以ISO语言区域格式指定的语言。可以为零以返回从用户默认数据库派生的默认写入方向


使用languageName=“ar”的解决方案

以下是语言列表:

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

结果如下:



这篇苹果文档将帮助你-

尝试使用
paragraphStyle.alignment=.natural
@MilanNosáľ这是默认的对齐方式,但我已经尝试过了。运气不好。也许添加
NSWritingDirectionAttributeName
?我不想强迫段落向右偏左,我已经使用了
natural
,所以它可以决定c考虑外观上设置的方向。更新可能会帮助你-嘿,谢谢你的建议,但我不想强迫右向左,我想让它自己确定它,就像其他标签一样。我使用
natural
@miguel.gazela我同意你的担心。你绝对正确。代码应该是动态的(无强制更新).May
defaultWritingDirection
可以帮助您。是的,它就是这样工作的,这肯定是解决它的一种方法。但最初的问题仍然存在。为什么对齐和baseWritingDirection设置得不够自然,不能像普通文本标签一样翻转?这就是我想知道的。但是谢谢!@miguel.gazela有一个答案对于您的问题:
如果您将此属性的值设置为NSWritingDirectionNaturalDirection,则接收方会根据用户语言首选项设置的方向,将写入方向解析为NSWritingDirectionLeftToRight或NSWritingDirectionRightToLeft。
标签的自然语言是什么?应该是b英语(en)对吗?所以它遵循英语语言的方向。不,我已经将设备语言更改为阿拉伯语,我使用了阿拉伯语字符串,它仍然在屏幕左侧显示
标签。
class func defaultWritingDirection(forLanguage languageName: String?) -> NSWritingDirection
@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