• 设为首页
  • 点击收藏
  • 手机版
    手机扫一扫访问
    迪恩网络手机版
  • 关注官方公众号
    微信扫一扫关注
    公众号

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

[复制链接]
菜鸟教程小白 发表于 2022-12-11 19:37:43 | 显示全部楼层 |阅读模式 打印 上一主题 下一主题

当我使用 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/

回复

使用道具 举报

懒得打字嘛,点击右侧快捷回复 【右侧内容,后台自定义】
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

关注0

粉丝2

帖子830918

发布主题
阅读排行 更多
广告位

扫描微信二维码

查看手机版网站

随时了解更新最新资讯

139-2527-9053

在线客服(服务时间 9:00~18:00)

在线QQ客服
地址:深圳市南山区西丽大学城创智工业园
电邮:jeky_zhao#qq.com
移动电话:139-2527-9053

Powered by 互联科技 X3.4© 2001-2213 极客世界.|Sitemap