gpt4 book ai didi

ios - 如何使用 NSKernAttribute 在字母间距设置为 1.5 的情况下快速子类化 UILabel

转载 作者:行者123 更新时间:2023-11-28 16:16:08 24 4
gpt4 key购买 nike

我正在尝试对 UILabel 进行子类化,以便它的默认字距调整设置为 1.5然后我将在我的应用程序中使用它和多个标签。目标是开箱即用地设置默认内核,这样我就可以避免到处重复代码,标签也设置为属性文本和常规文本的混合示例:

@IBoutlet weak var myLabel: CustomeLabelWithKern!
myLabel.attributedText = myAttributedText

@IBOutlet weak var myOtherLabelInADifferentViewController: CustomeLabelWithKern!
myOtherLabelInADifferentViewController.text "Foo Bar"

这两个标签都应该有 1.5 的 kern

这是我目前所拥有的

class CustomLabel: UILabel {
var kerning: CGFloat = 1.5

required init?(coder aDecoder: NSCoder) {
super.init(coder: aDecoder)
setKerning(kerning)
}

private func setKerning(kern: CGFloat) {
guard let text = self.text else { return }
let range = NSRange(location: 0, length: text.characters.count)
let mutableString = NSMutableAttributedString(attributedString: attributedText ?? NSAttributedString())
mutableString.addAttribute(NSKernAttributeName, value: kern, range: range)
attributedText = mutableString
}
}

最佳答案

这是我到目前为止所拥有的,我想我现在会使用这个解决方案,如果有人想出一个更好的解决方案,我也很乐意尝试一下

class CustomLabel: UILabel {
static var kerning: CGFloat = 1.5

override func awakeFromNib() {
super.awakeFromNib()
setKerning(CustomLabel.kerning)
}

func setKerning(kern: CGFloat) {
let text = self.text ?? ""
let range = NSRange(location: 0, length: text.characters.count)
let mutableString = NSMutableAttributedString(attributedString: attributedText ?? NSAttributedString())
mutableString.addAttribute(NSKernAttributeName, value: kern, range: range)
attributedText = mutableString
}
}

我可以在我的 viewController 中这样使用它

mylabel.text = "Hello World!" // this should be set to 1.5 by default but what if i am setting my label dynamically? 
mylabel.setKerning(1.5) // Here i am passing the value so if the label is set dynamically set it will have correct spacing

// This also works if some of my labels have attributed text
myAttibutedLabel.attributedText = myAttributedText
myAttributedLabel.setKerning(1.5)

我认为这可以简化为 UILabel 类的扩展像这样

extension UILabel {
func setKerning(kern: CGFloat) {
let text = self.text ?? ""
let range = NSRange(location: 0, length: text.characters.count)
let mutableString = NSMutableAttributedString(attributedString: attributedText ?? NSAttributedString())
mutableString.addAttribute(NSKernAttributeName, value: kern, range: range)
attributedText = mutableString
}
}

关于ios - 如何使用 NSKernAttribute 在字母间距设置为 1.5 的情况下快速子类化 UILabel,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39066348/

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