Я создаю кучу текстовых полей во время выполнения, содержащих htmlText
, проблема в том, что получение высоты TextField
крайне неточно.
Если я обращаюсь к свойству TextField._height
или TextField.height
, оно даже близко не соответствует точности и может варьироваться от 0 до 1,5 высоты строки.
Я попытался поместить TextField в пустой MovieClip
и получить высоту MovieClip, однако это возвращает ту же неточность. (Показано в примере)
Соответствующий код:
var format = new TextFormat();
format.size = 14;
format.align = "left";
format.font = "Arial";
format.color = 0x000000;
format.leading = 3;
var textBoxes:Array = new Array();
function createText(htmlString:String, isOption:Boolean, name:String) {
var textY:Number;
if(isOption) {
var textMC:MovieClip = target.attachMovie("option", "txt_" + textBoxes.length, target.getNextHighestDepth());
textMC.name.text = name;
} else {
var textMC:MovieClip = target.createEmptyMovieClip("txt_" + textBoxes.length, target.getNextHighestDepth());
}
var fieldContainer:MovieClip = textMC.createEmptyMovieClip("container", textMC.getNextHighestDepth());
var textBox:TextField = fieldContainer.createTextField("textBox", fieldContainer.getNextHighestDepth(), studySettings.margin, studySettings.margin, target._width - (studySettings.margin * 2),0);
textBox.autoSize = true;
textBox.wordWrap = true;
textBox.html = true;
textBox.multiline = true;
textBox.htmlText = htmlString;
textBox.setTextFormat(format);
textBox.embedFonts = true;
textBox.selectable = false;
textBox.antiAliasType = "advanced";
if(isOption) {
textMC.option = currentOption;
textMC.enabled = false;
textBox._y += textMC.background._y;
textBox._width = textMC._width - (studySettings.margin * 3);
textMC.background._width = target._width - (studySettings.margin * 2);
textMC.background._height = fieldContainer._height + (studySettings.margin * 2);
textMC._x = studySettings.margin;
textMC.onRollOver = function() {
this.background.gotoAndStop("over");
}
textMC.onRollOut = function() {
this.background.gotoAndStop("up");
}
textMC.onRelease = function() {
showStudy(study.caseIndex, study.choiceIndex, false, this.option);
clearStudy(study, false);
}
}
if(textBoxes.length) {
var prebounds:Object = textBoxes[textBoxes.length - 1].getBounds(target);
textMC._y = (isOption) ? prebounds.yMax + studySettings.margin : prebounds.yMax;
} else {
textMC._y = 0;
}
textBoxes.push(textMC);
Как я могу надежно получить высоту TextField
?