当使用NSKernAttributeName时,它在每行的末尾放置一个空格,有什么办法可以解决这个问题?我可以将属性设置为以下范围:

NSRange(location: 0, length: self.text!.characters.count-1)

但是我不想为每一行都设置这个。

这是我正在使用的游乐场中的测试代码
//: Playground - noun: a place where people can play

import UIKit
import XCPlayground

var text = "Hello, playground\nhow are you?"

let paragraphStyle = NSMutableParagraphStyle()
paragraphStyle.paragraphSpacing = 50
paragraphStyle.alignment = NSTextAlignment.Left
paragraphStyle.lineBreakMode = NSLineBreakMode.ByTruncatingTail

let attributes = [
    NSParagraphStyleAttributeName: paragraphStyle
    , NSKernAttributeName: 20
]


let attributedString = NSAttributedString(string: text, attributes: attributes)

let label = UILabel()
label.attributedText = attributedString
label.numberOfLines = 0
label.textColor = UIColor.greenColor()
label.backgroundColor = UIColor.orangeColor()
label.sizeToFit()
label.center = CGPoint(x: 500, y: 100)


var text2 = "What's up\nWhere are you?"
let attributedString2 = NSAttributedString(string: text2, attributes: attributes)

let label2 = UILabel()
label2.attributedText = attributedString2
label2.numberOfLines = 0
label2.textColor = UIColor.greenColor()
label2.backgroundColor = UIColor.orangeColor()
label2.sizeToFit()
label2.center = CGPoint(x: 500, y: 250)

var text3 = "Hello"
let attributedString3 = NSAttributedString(string: text3, attributes: attributes)

let label3 = UILabel()
label3.attributedText = attributedString3
label3.numberOfLines = 0
label3.textColor = UIColor.greenColor()
label3.backgroundColor = UIColor.orangeColor()
label3.sizeToFit()
label3.center = CGPoint(x: 500, y: 400)

let holderView = UIView(frame: CGRect(x: 0, y: 0, width: 1000, height: 500))
holderView.backgroundColor = UIColor.lightGrayColor()
holderView.addSubview(label)
holderView.addSubview(label2)
holderView.addSubview(label3)

XCPlaygroundPage.currentPage.liveView = holderView

结果看起来像这样:

ios - NSAttributedString行尾的NSKernAttributeName空间-LMLPHP

您可以在每行的末尾看到空格。

最佳答案

这实际上是字距调整的定义。它将调整字距调整后的字符与下一个字符所处的位置之间的间隔。下一个字符是否继续绘制无关紧要。

Standard Attributes



如果有帮助,请考虑在文字处理器中执行此操作。如果字距调整已打开,并且您键入了一个字符,那么您期望插入点在哪里?预期的答案将是“与刚键入的字符的偏移量为kern数量”,因为那是在默认情况下,kern为0的情况,对吗?好吧,这就是这里发生的事情:如果您紧缩字符串的最后一个字符,那么该字符串将包括最后一个紧缩。

因此,这里要做的正确的事情是将您的dropLast()逻辑包装在扩展中,并称之为一天。

关于ios - NSAttributedString行尾的NSKernAttributeName空间,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/37594704/

10-09 02:44