13

How to set a Spark List height to the height of its content?

Tried this:

var lastRow:IVisualElement =
                 myList.dataGroup.getElementAt(myList.dataGroup.numElements - 1);
myList.height = lastRow.y + lastRow.height;

It works in case of a single item, but lastRow is null in case of more items.

alexey
  • 8,360
  • 14
  • 70
  • 102

5 Answers5

25

In mxml you can do it like so:

<s:List width="100%">
    <s:layout>
        <s:VerticalLayout useVirtualLayout="false" requestedMinRowCount="1"/>
    </s:layout>
</s:List>

You set the requestedMinRowCount or the requestedRowCount in the layout inside the List. It got me before, too. Hope that helps.

Marty
  • 266
  • 4
  • 3
  • 1
    I'm trying to get this to work with TileLayout, but there is no requestedMinRowCount for TileLayout. I wonder how to get the height to dynamically set for the list when using TileLayout so that the list only takes up space for which it needs to display it's rows? – Stephen Horvath Aug 30 '11 at 18:03
4

For TileList I did it like this:

<s:List width="100%" height="{(tilelayout.rowCount * tilelayout.rowHeight) + ((tilelayout.rowCount - 1) * tilelayout.verticalGap)}">
    <s:layout>
        <s:TileLayout id="tilelayout" rowHeight="190" columnWidth="130" horizontalGap="5" verticalGap="10" />
    </s:layout>
</s:List>
Stephen Horvath
  • 5,188
  • 3
  • 24
  • 31
3

try this layout - for regular list

<s:layout>
<s:VerticalLayout horizontalAlign="contentJustify" 
  gap="0"
  verticalAlign="middle" 
  variableRowHeight="false"/>
</s:layout>
Amalia
  • 31
  • 1
1
public class MyTileLayout extends TileLayout
{

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

        target.height = rowCount*rowHeight + verticalGap*(rowCount - 1);
    }

}

Or you can extend your TileLayout :)

Katya
  • 11
  • 1
1

Easiest way to do this

height="{list.dataGroup.contentHeight}"
Tamás
  • 47,239
  • 12
  • 105
  • 124
Raja Jaganathan
  • 33,099
  • 4
  • 30
  • 33