如何将多行文本字段(动态、文本居中)垂直居中到另一个 MovieClip?

Posted

技术标签:

【中文标题】如何将多行文本字段(动态、文本居中)垂直居中到另一个 MovieClip?【英文标题】:How can I vertically center a Multiline Textfield (dynamic, text-centered) to another MovieClip? 【发布时间】:2011-08-09 20:24:51 【问题描述】:

通常,要将舞台上的一个实例垂直水平居中,您可以使用简单的逻辑并通过引用所涉及符号的宽度、高度、x 和 y 坐标。

这在现场似乎是不可能的,因为 Textfield.height 和 Textfield.textHeight 报告的值不正确。它们带回相同的值,这些值并不能反映舞台上实例的实际高度。

我制作了这个简单的例子来说明问题:http://omnom.replete.nu/fails.fla

谢谢。

【问题讨论】:

【参考方案1】:

TextField 的高度与文本本身的高度无关。 文本高度可能因多种原因而改变。 一个很好的例子是字体系列和字体大小。 您需要使用文本指标来获取该信息。ALL THE INFO HERE

[编辑] 根据您的 cmets,您的 scaleTextToFitInTextField 函数的最后一行应该执行此操作。 您需要找到两个对象的中心并减去它们然后添加偏移量

txt.x = cont.width/2 - txt.width/2 + cont.x
txt.y = cont.height/2 - txt.height/2 + cont.y

[编辑编辑] 同时删除这 2 行,因为它们现在是多余的

red.tf.x = red.mchammer.x;
red.tf.y = red.mchammer.y;

【讨论】:

var metrics:TextLineMetrics = myRoot.container.txtLine1.getLineMetrics(0); trace("metrics: " + metrics.height); 此代码仍然会产生错误的高度。它的高度肯定超过 7 像素。 我可以确认上面评论中的代码在设计时显示了文本字段的像素大小。如果我在 IDE 中更改字体大小,则在这里得到证明。此外,根据 Adob​​e 的说法,TextField.textHeight 应该以像素为单位返回文本的高度。在我的情况下,它没有。 Adobe Reference - TextField AS2 (IIRC) 中的一个已知问题是字体指标完全错误。您应该研究以确保它在 AS3 中给出正确的读数 您是否包括 2 像素顶部排水沟和 2 像素底部排水沟? 如果是多行则加上前导间隙【参考方案2】:

我可能误解了你的问题,但如果没有,你试过这个吗?

red.tf.y = red.blue.height / 2 - red.tf.height / 2 + red.blue.y;

这是将文本字段 (tf) 垂直居中于蓝色框。

基本上你得到蓝色矩形的中心y坐标,减去文本字段的中心y坐标,最后加上蓝色矩形的y位置。

为了获得最佳效果,您需要定义了 autoSize 的文本字段,并且动画剪辑具有 (0, 0) 参考点。

水平方向相同,但有x坐标和宽度参数。

red.tf.x = red.blue.width / 2 - red.tf.width / 2 + red.blue.x;

【讨论】:

在我的问题的后半部分,我提到主要问题是没有正确报告高度。不幸的是,这个答案没有任何意义。 我明白了。那我不明白你说的尺寸是多少。如果您设置文本字段的 autoSize,实际对象将围绕您输入的文本,并且文本字段的高度将是正确的。如果你想比这更深入,那么 textmetrics 就是你要找的。​​span> 请不要告诉我它报告了正确的高度。这个问题的重点是因为它没有返回正确的高度。不要试图变得粗鲁,如果你正确地阅读了这个问题 - 你就会明白这一点。

以上是关于如何将多行文本字段(动态、文本居中)垂直居中到另一个 MovieClip?的主要内容,如果未能解决你的问题,请参考以下文章

固定容器高度的多行文字垂直居中

关于多行文本的垂直居中

如何将跨多行的 React Native Flexbox 文本水平居中

行内和块状元素水平居中与单行或多行文本垂直居中及隐性改变display类型

关于垂直居中

如何在div中垂直居中文本? [复制]