ios – 如何为’UILabel`设置字符(kern)和删除线样式之间的间距?

ios – 如何为’UILabel`设置字符(kern)和删除线样式之间的间距?,第1张

概述我需要为UILabel提供的文本设置两个属性:字母之间的间距(kern)和它的删除线样式.基于NSAttributedStringKey文档,我为UILabel创建了以下扩展: extension UILabel { func setStrikeThroughSpacedText(text: String, kern: CGFloat?) { var attributes: 我需要为UILabel提供的文本设置两个属性:字母之间的间距(kern)和它的删除线样式.基于NSAttributedStringKey文档,我为UILabel创建了以下扩展:

extension UILabel {    func setStrikeThroughSpacedText(text: String,kern: CGfloat?) {        var attributes: [NSAttributedStringKey : Any] = [:]        if let kern = kern {            attributes[.kern] = kern        }        attributes[.strikethroughStyle]                   = NSNumber(integerliteral: NSUnderlinestyle.styleSingle.rawValue)        self.attributedText = NSAttributedString(string: text,attributes: attributes)    }}

但是,似乎.kern键以某种方式与.strikethroughStyle键冲突,因为如果我指定kern,则应用kern,但不应用删除线样式.如果我没有指定kern(因此扩展名不应用.kern属性),删除线样式将起作用.

任何人都有不同的方法来解决这个错误(我认为这是一个错误)?

解决方法 试试这个,它应该适合你
注意:我在Swift 4中测试过

let label = UILabel()let stringValue = "How to\ncontrol\nthe\nline spacing\nin UILabel"let attrString = NSMutableAttributedString(string: stringValue)let style = NSMutableParagraphStyle()style.linespacing = 24 // change line spacing between paragraph like 36 or 48style.minimumlineHeight = 20 // change line spacing between each line like 30 or 40attrString.addAttribute(NSAttributedStringKey.paragraphStyle,value: style,range: NSRange(location: 0,length: stringValue.count))attrString.addAttribute(NSAttributedStringKey.strikethroughStyle,value: 2,range: NSMakeRange(0,attrString.length))attrString.addAttribute(NSAttributedStringKey.kern,attrString.length))label.attributedText = attrString

结果:
模拟1:打击线间距
Sim 2:Strike linespacing字符间距

总结

以上是内存溢出为你收集整理的ios – 如何为’UILabel`设置字符(kern)和删除线样式之间的间距?全部内容,希望文章能够帮你解决ios – 如何为’UILabel`设置字符(kern)和删除线样式之间的间距?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/1059998.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-05-25
下一篇 2022-05-25

发表评论

登录后才能评论

评论列表(0条)

保存