在SpriteKit中,您现在可以设置SKLabelNode
的行数,因此标签可能会经过几行。
let lb = SKLabelNode(fontNamed: "Courier-bold")
lb.numberOfLines = 0
lb.preferredMaxLayoutWidth = size.width
有没有办法确定SKLabelNode
呈现的 ACTUAL 行数?
答案 0 :(得分:1)
如果您的SKLabelNode
中有常规文字,则应通过生成具有相同文字格式参数的UILabel
来计算,并计算其实际行数described here。
如果您已归因于文字,请使用boundingRect(with:options:context:)
来获取高度。
使用常规文字:
let label = UILabel()
label.text = lb.text
label.numberOfLines = numberOfLines
label.font = UIFont(name: lb.fontName, size: lb.fontSize)
let labelHeight = label.sizeThatFits(CGSize(width: lb.preferredMaxLayoutWidth, height: .greatestFiniteMagnitude)).height
numberOfLines = Int(labelHeight / label.font.pointSize)
使用归因文字(如果它只使用一种字体):
let labelMaxSize = CGSize(width: lb.preferredMaxLayoutWidth, height: .greatestFiniteMagnitude)
let labelHeight = lb.attributedText.boundingRect(with: labelMaxSize, options: .usesLineFragmentOrigin, context: nil).size
guard let pointSize = (lb.attributedText.attributes(at: 0, effectiveRange: nil)[.font] as? UIFont)?.pointSize else {
return
}
numberOfLines = Int(labelHeight / pointSize)