Обновление Grid Renderers без вызова updateDisplayList

У меня есть средство визуализации элементов для сетки, которая имеет довольно базовую функцию updateDisplayList:

override protected function updateDisplayList( w : Number, h : Number ) : void
{
    super.updateDisplayList( w, h );

    var labelWidth : Number = Math.min( _labelDisplay.measuredWidth, w );
    var labelHeight : Number = Math.min( _labelDisplay.measuredHeight, h );

    _labelDisplay.setActualSize( labelWidth, labelHeight );

    var labelX : Number = ( w - _labelDisplay.width ) / 2;
    var labelY : Number = ( h - _labelDisplay.height ) / 2;

    _labelDisplay.move( labelX, labelY );

    //this is just for debugging
    graphics.clear();
    graphics.beginFill( 0xFF0000, 0.5 );
    graphics.drawRect( labelX, labelY, labelWidth, labelHeight );
    graphics.endFill();
}

где _labelDisplay - это искровой лейбл. Когда я прокручиваю сетку (это сетка cuatom, а не mx:Grid или AndvancedDataGrid), когда в нижней части сетки появляются новые строки, вызывается updateDisplayList и выполняется код для перерисовки фона и перемещения / изменения размера метки.

Проблема в том, что эти чанги не отражаются в представлении. Текст выровнен неправильно, так как метка, которая использовалась для отображения большой строки, теперь отображает короткую строку, поэтому измеренная ширина изменилась.

В следующий раз я прокручиваю обновление рендеров так, чтобы они выглядели так, как должно - но здесь не вызывается updateDisplayList (на рендерах). Все, что происходит, - это то, что рендеры расположены в сетке. И фон, и метка изначально отображаются некорректно, так что это не просто неправильное поведение метки.

Кто-нибудь понял, почему это происходит?

Спасибо

1 ответ

Просто предположение, но имеет ли это какое-то значение?

override protected function updateDisplayList( w : Number, h : Number ) : void
{
    var labelWidth : Number = Math.min( _labelDisplay.measuredWidth, w );
    var labelHeight : Number = Math.min( _labelDisplay.measuredHeight, h );

    _labelDisplay.setActualSize( labelWidth, labelHeight );

    var labelX : Number = ( w - _labelDisplay.width ) / 2;
    var labelY : Number = ( h - _labelDisplay.height ) / 2;

    _labelDisplay.move( labelX, labelY );

   super.updateDisplayList( w, h ); // Call updateDisplayList after moving / resizing _labelDisplay
}
Другие вопросы по тегам