gpt4 book ai didi

ios - UILabel 不适用于从右到左的 NSAttributedString + NSParagraphStyle

转载 作者:塔克拉玛干 更新时间:2023-11-02 22:05:06 27 4
gpt4 key购买 nike

当我使用 UISemanticContentAttributeForceRightToLeft 时,我遇到了将 NSAttributedStringsNSParagraphStyle 一起使用的 UILabel 的问题。

我有一个在 UI 上只有 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 它就会开始工作。请注意,我什至没有对其进行任何更改,但仅通过使用它就会弄乱对齐。

对可能导致此问题的原因有任何想法吗?

最佳答案

NSMutableParagraphStyle有一个属性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

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

关于ios - UILabel 不适用于从右到左的 NSAttributedString + NSParagraphStyle,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48326178/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com