我有一個TextField,其中啓用了多行和換行符,並且寬度固定。我想計算裏面文本的總高度。TextField多行+換行獲取文字高度
我試過使用TextField.textHeight
,但那給了我一行的高度。由於包裝,我不能輕鬆計算行數乘以行高。 TextField.height
只是給了我固定的,默認的字段高度,100像素。
那麼該怎麼做呢?
我有一個TextField,其中啓用了多行和換行符,並且寬度固定。我想計算裏面文本的總高度。TextField多行+換行獲取文字高度
我試過使用TextField.textHeight
,但那給了我一行的高度。由於包裝,我不能輕鬆計算行數乘以行高。 TextField.height
只是給了我固定的,默認的字段高度,100像素。
那麼該怎麼做呢?
您的代碼中必須有錯誤,因爲textHeight應該返回TextField的高度,而不僅僅是一個線條高度。
確保您包括將wordWrap
這個痕跡txt.textHeight = 135
var format:TextFormat = new TextFormat(); format.font = new Bauhaus().fontName; var txt:TextField = new TextField(); txt.embedFonts = true; txt.multiline = true; txt.defaultTextFormat = format; txt.wordWrap = true; txt.width = 100; txt.text = "Lorem ipsum dolor sit amet, consectetur adipiscing elit. Morbi metus diam, condimentum sagittis rutrum vitae, vehicula et velit."; addChild(txt); trace("txt.textHeight "+txt.textHeight);
以下兩種方法都適用於單行,多行換行(只是文本換行和\ n)和多行不換行(僅\ n)。
短假想設定版本(不使用此):
var totalLines = textField.bottomScrollV - textField.scrollV + textField.maxScrollV;
var metrics = textField.getLineMetrics(0);
var gutter = 2;
var actualHeight = (metrics.ascent + metrics.descent) * totalLines + (totalLines - 1) * metrics.leading + 2 * gutter;
更長的更好的版本,其中線具有不同的指標(使用此):
var gutter = 2;
var totalLines = textField.bottomScrollV - textField.scrollV + textField.maxScrollV;
var actualHeight = 0;
var prevLeading = 0;
for (var i = 0; i < totalLines; i += 1)
{
var metrics = textField.getLineMetrics(i);
actualHeight += metrics.ascent + metrics.descent + prevLeading;
prevLeading = metrics.leading;
}
actualHeight += 2 * gutter;
對於單線路測試具有內嵌image textField height給了我32,textHeight給了我39,計算出的高度(actualHeight above)是34.對於高度爲97.20的多線測試,textHeight是23.79,actualHeight是97.15。這個實際的高度包括兩側的排水溝,但是如果有任何的話,則去掉尾隨的龍頭。
嗯,也許我的代碼有問題,現在可以。無法真正記住我如何或何時修復它。 – Lahey 2010-09-29 13:19:33
TextField的高度實際上是(textHeight + 4)。 TextField在文本週圍包含一個2像素的裝訂線,所以如果autoSize不是TextFieldAutoSize.NONE,則TextField的高度將自動調整爲textHeight +(2px頂部裝訂線)+(2px底部裝訂線)。請參閱:http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/flash/text/TextLineMetrics.html和http://help.adobe.com/en_US/FlashPlatform/reference/actionscript/3/ flash/text/TextField.html#autoSize將wordWrap設置爲true會導致水平自動調整大小停止,但它仍然會自動調整垂直大小。 – Triynko 2012-03-19 21:21:13