当我使用 UISemanticContentAttributeForceRightToLeft
时,我遇到了使用 NSAttributedStrings
和 NSParagraphStyle
的 UILabel 问题。
我有一个 UI 上只有 2 个标签的演示应用。
它们有前导和尾随约束。
我正在使用
在 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
它开始工作。请注意,我什至没有对其进行任何更改,但仅使用它就会弄乱对齐方式。
有什么可能导致这种情况的想法吗?
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
代码作为语言。标签文本的方向取决于语言的自然方向。
结果如下:
这份 Apple 文档将为您提供帮助 - Supporting Right-to-Left Languages
关于ios - UILabel 不适用于 NSAttributedString + NSParagraphStyle 从右到左,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48326178/
欢迎光临 OGeek|极客世界-中国程序员成长平台 (http://jike.in/) | Powered by Discuz! X3.4 |