为什么将kern设置为0具有与完全不设置不同的效果

时间:2018-06-06 14:46:04

标签: ios swift nsattributedstring nsattributedstringkey

设置NSAttributedString并比较两个UITextViews和一个kern设置为0而另一个没有kern。我注意到一种奇怪的行为。如果我将kern设置为0,我得到的结果与完全不设置完全不同。几乎就像我得到超过0 kern或至少在单词之间。我还对UILabel进行了测试,并且kern匹配了未设置kern的NSAttributedString。在docs中,它表示默认值为0,但也表示禁用了带0的字距调整。还有其他一些我失踪的东西。这是一个实现alphas设置来比较结果。

import UIKit

class ViewController: UIViewController {

    override func viewDidLoad() {
        super.viewDidLoad()
        // Do any additional setup after loading the view, typically from a nib.

        let label = UILabel()
        label.frame = CGRect(x: 100, y: 100, width: 200, height: 41)
        label.font = UIFont.systemFont(ofSize: 80)
        label.numberOfLines = 0
        label.alpha = 0.6
        label.adjustsFontSizeToFitWidth = true
        label.text = "great World This is a test"
        label.textColor = .black
        label.sizeToFit()
        self.view.addSubview(label)

        let textView = UITextView(frame: label.frame)
        textView.font = label.font
        textView.attributedText = NSAttributedString(string: label.text!, attributes: [.font:label.font,.kern:0,.foregroundColor:UIColor.green])
        textView.textContainerInset = UIEdgeInsets.zero
        textView.textContainer.lineFragmentPadding = 0
        textView.alpha = 0.4
        self.view.addSubview(textView)

        let anotherTextView = UITextView(frame: label.frame)
        anotherTextView.font = label.font
        anotherTextView.attributedText = NSAttributedString(string: label.text!, attributes: [.font:label.font,.foregroundColor:UIColor.red])
        anotherTextView.textContainerInset = UIEdgeInsets.zero
        anotherTextView.textContainer.lineFragmentPadding = 0
        anotherTextView.alpha = 0.6
        self.view.addSubview(anotherTextView)

    }
}

我的目标是让UITextViewUILabel匹配,但设置为kern为0。 这是结果的图像: Image

从我的测试中,如果我将kern设置为一些任意小的非零正数,它们似乎都匹配。 例如: .kern:0.0001。
也许这是完全禁用的答案。 这是任意小数的结果。 withsmallnumber

在理解正确设置方面有任何帮助,因为即使我的模型kern没有值,我也需要始终拥有默认值。

由于

0 个答案:

没有答案