Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/107.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios 按基线对齐多个SKLabelNodes_Ios_Fonts_Sprite Kit_Skspritenode_Sklabelnode - Fatal编程技术网

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
的大小,并正确地将标签居中。

只是想注意,我在这里发布了我的方法(针对类似问题)。我的解决方案基于您的回答: