调整文本大小以适应具有固定宽度的SKLabelNode

13

我刚接触Spritekit并尝试调整SKLabelNode的宽度,然后根据节点内文字的大小调整字体大小。

一直在查看文档,但似乎找不到类似于UILabel函数的东西:

UILabel.adjustsFontSizeToFitWidth = true

谢谢。


你找不到它 :) 在SKLabelNode上没有这样的东西。你可以自己计算一切。 - Whirlwind
@Whirlwind tx 看到了,这不是取决于您是否知道父节点(CGRect)的大小吗?我正在构建一个高分视图,在其中将 LabelNode 叠加在 SKSpritenode 的特定区域上,而我不知道其尺寸。 - dancingbush
1
更简单的方法。我认为你可以使用上面链接中提供的内容。但是我稍后会为你编写一个示例。 - Whirlwind
2
还有其他人认为是时候推出NSAttributedString版本的SKLabelNode了吗? - Confused
1
同时,一个高效的多行标签节点也是不错的选择。@dancingbush 抱歉我还没有时间写答案,但通常我会根据标签的框架更新标签的字体大小,同时考虑精灵(父级)的框架。 - Whirlwind
显示剩余7条评论
1个回答

8

我发现了一个不错的函数,但是我不太记得具体在哪里找到它了。

    func adjustLabelFontSizeToFitRect(labelNode:SKLabelNode, rect:CGRect) {

    // Determine the font scaling factor that should let the label text fit in the given rectangle.
    let scalingFactor = min(rect.width / labelNode.frame.width, rect.height / labelNode.frame.height)

    // Change the fontSize.
    labelNode.fontSize *= scalingFactor

    // Optionally move the SKLabelNode to the center of the rectangle.
    labelNode.position = CGPoint(x: rect.midX, y: rect.midY - labelNode.frame.height / 2.0)
}

这会调整标签的字体大小以完全适合宽度,但您可能想更改函数以在所有侧面添加一些额外的填充。


非常感谢@Aidan,那我是将SKLabelNode和父级UITextview的尺寸作为CGRect传递吗?计划是通过UITextField获取用户输入,并在SKLabelNode的边界内输入该字符串。 - dancingbush
对于没有太多文本经验的人来说,这个只能适用于单行文本。而且它也不能保证因为字体缩放不是线性的。你可能需要将其放入循环中,并在框内至少包含几个像素的边距。 - Andy Dent

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接