Search code examples
actionscript-3flashactionscriptadobeadobe-animate

how to make dynamic text move to vertical center if only 1 line is left in AS3


Is there a way to move dynamical text multiline to the center if there is only 1 line left, because veritcal center cannot be adjusted in the properties panel.

Image 3 Lines text and 1 line text


Solution

  • There's no default option for that, but you can emulate it.

    // Let's assume this is your TextField you need to v-align.
    var TF:TextField;
    
    // Lets also assume that TextField is still in its original place.
    // Record its upper Y-coordinate and height.
    var atop:Number = TF.y;
    var aheight:Number = TF.height;
    
    // These lines instruct the TextField to adjust its lower
    // border so that it exactly fits the text inside.
    TF.wordWrap = true;
    TF.autoSize = TextFieldAutoSize.LEFT;
    
    // Now, math time.
    // The difference between original height and new (autosized) height.
    var adiff:Number = aheight - TF.height;
    
    // To vertically position the resized TextField into the center of its original
    // place, you need to shift it down by half of the height difference.
    // It actually works if new height is larger than original too:
    // the "adiff" value will be negative and it still works out.
    TF.y = atop + adiff / 2;