OStack程序员社区-中国程序员成长平台

标题: ios - UILabel 不适用于 NSAttributedString + NSParagraphStyle 从右到左 [打印本页]

作者: 菜鸟教程小白    时间: 2022-12-11 19:37
标题: ios - UILabel 不适用于 NSAttributedString + NSParagraphStyle 从右到左

当我使用 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 它开始工作。请注意,我什至没有对其进行任何更改,但仅使用它就会弄乱对齐方式。

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



Best Answer-推荐答案


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/






欢迎光临 OStack程序员社区-中国程序员成长平台 (https://ostack.cn/) Powered by Discuz! X3.4