Ios 按基线对齐多个SKLabelNodes
我有一组Ios 按基线对齐多个SKLabelNodes,ios,fonts,sprite-kit,skspritenode,sklabelnode,Ios,Fonts,Sprite Kit,Skspritenode,Sklabelnode,我有一组SKLabelNodes。每个节点代表一个单词的一个字母。每个节点都是SKSpriteNode的子节点。spriteNode上设置了一个显式的hight(由[文本大小属性:@{NSFontAttributeName:font}];返回的hight),并且与labelNode具有相同的宽度 然后,labelNode集中在spriteNode内,并具有verticalAlignmentMode=SKLabelVerticalAlignmentModeBaseline。在稍后的阶段,我需要在每
SKLabelNodes
。每个节点代表一个单词的一个字母。每个节点都是SKSpriteNode
的子节点。spriteNode
上设置了一个显式的hight(由[文本大小属性:@{NSFontAttributeName:font}];
返回的hight),并且与labelNode
具有相同的宽度
然后,labelNode
集中在spriteNode
内,并具有verticalAlignmentMode=SKLabelVerticalAlignmentModeBaseline
。在稍后的阶段,我需要在每个字母上设置一个背景图像(这将使用spriteNode
)。出于测试目的,我使用纯色,使问题变得明显:
如您所见,字母“y”的下半部分显示在容器的下方spriteNode
。同样的事情也发生在“g”和其他字母上。我还应该解释一下,每个letterNode
(即spriteNode
和子labelNode
)垂直居中,并在另一个SKSpriteNode
内水平隔开,用于包含一个单词的所有字母
创建字母节点的代码
:
SKLabelNode *labelNode = [SKLabelNode labelNodeWithText:text];
labelNode.fontName = font.fontName;
labelNode.fontSize = font.pointSize;
labelNode.fontColor = colour;
labelNode.position = CGPointMake(0, -floor(height/2));
// height is the same explicit height used to create the spriteNode.
SNLetterNode *letter = [SNLetterNode spriteNodeWithColor:[UIColor lightGrayColor] size:CGSizeMake(labelNode.frame.size.width, height)];
letter.letter = text;
letter.labelNode = labelNode;
letter.size = CGSizeMake(self.labelNode.frame.size.width, height);
包含单词所有字母的SKSpriteNode
如下所示:
CGSize fullWordSize = [text sizeWithAttributes:@{NSFontAttributeName : font}];
SNWordNode *word = [SNWordNode spriteNodeWithColor:[UIColor clearColor] size:fullWordSize];
word.letterNodes = letterNodes;
word.text = text;
我认为问题是由我定位和/或调整标签
和spriteNodes
的方式引起的。我尝试过使用不同的垂直对齐模式,并在此基础上重新定位标签,但都无济于事。如果我知道一种基于文本基线对齐节点的方法,那将是一个开始
我希望发生的是,灰色背景向下延伸,覆盖“y”的下部,并在所有字母节点上发生(无论它们是否需要,如“y”)。并且文本仍按基线对齐
任何帮助都将不胜感激
提前感谢。根据苹果公司的文档()的说法,(在我的例子中)“y”在边框下方出现的部分被称为“下降者”
UIFont
上有一个属性,名为depender
,它为您提供了下降所能达到的最高值。我用它来增加包含SKLabelNode
的SKSpriteNode
的大小,并正确地将标签居中。只是想注意,我在这里发布了我的方法(针对类似问题)。我的解决方案基于您的回答: