Beste Weg, um Größe-Container in Flex zu gehorchen, NUR die übergeordneten Container' explicit Abmessungen
Ich habe laufen in dieses problem mit Flex seit fast einem Jahr, und jedes mal habe ich einen quick-hack Lösung, die funktioniert zur Zeit. Ich würde gerne sehen, wenn jemand hat eine bessere Idee.
Hier sind die Bedingungen für ein problem:
|------Container ------------|
| explicitHeight: 400 (or whatever)
| |
| |-------- VBox -------| |
| | percentHeight: 100 | |
| | | |
| | |-Repeater------| | |
| | | Potentially | | |
| | | a lot of stuff. | |
|-- | -- | --------------- | --- | ---|
Das problem ist, dass, im Gegensatz zu dem, was ich möchte, um zu geschehen, die VBox wird sich IMMER erweitern, um Platz für den Inhalt, statt kleben die explizite Höhe des übergeordneten Elements und erstellen Sie eine Bildlaufleiste.
Meine Lösung ist zu schwierig, code in einen Verweis auf das übergeordnete (oder so weit, bis die Anzeige Liste, die wir gehen müssen, um zu finden, die einer explizit definierten Wert im Gegensatz zu einem Prozentsatz).
Habe ich sogar überlegt, mit diesem in eine utility-Klasse:
public static function getFirstExplicitHeightInDisplayList(comp:UIComponent):Number{
if (!isNaN(comp.explicitHeight)) return comp.explicitHeight;
if (comp.parent is UIComponent) return
getFirstExplicitHeightInDisplayList(UIComponent(comp.parent));
else return 0;
}
Bitte sagen Sie mir, es gibt einen besseren Weg.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Müssen Sie die "autoLayout" - parameter auf der VBox als Dokumentation sagen:
"standardmäßig wird die Größe der VBox-container ist groß genug, um halten Sie das Bild an es ursprüngliche Größe. Wenn Sie deaktivieren, layout-updates, und verwenden Sie die Zoom-in-Effekt um das Bild zu vergrößern, oder verwenden Sie das Verschieben-Effekt, um das Bild neu positionieren, könnte das Bild erweitern Vergangenheit die Grenzen der VBox-container.
legen Sie die autoLayout-Eigenschaft auf false, so dass der VBox-container nicht die Größe wie das Bild ändert. Wenn das Bild wächst zu einer Größe, so dass es erstreckt sich über die Grenzen der VBox-container, die container fügt scroll-bars und-clips, die das Bild an seine Grenzen.
Ich hoffe, dass wird Ihnen helfen.
Einstellung minHeight = 0 ist alles, was Sie tun müssen.
Dieser erzählt die VBox zu ignorieren, es ist für Kinder Messungen bei der Kalibrierung selbst, und die Berechnung der Höhe statt, basierend auf eigenen/es Eltern Einschränkungen. Alles andere, wie Sie normalerweise würde, scrollen und alles andere funktioniert perfekt.
Verbrachte die TAGE auf dieses Jahr - es ist nicht intuitiv, Sie hätten wohl Namen die Eigenschaft besser. Hoffe, das spart u Jungs einige Zeit...
AutoLayout=false scheint nur verhindern, dass das layout wird erneut ausgeführt, wenn die Kinder Größe ändern. Jedoch, wenn Sie hinzufügen oder entfernen Sie Kinder, wird das layout erneut ausführen sowieso.
Einstellung minHeight=0 tatsächlich komplett trennen (außen) die Größe der VBox von der Größe und der Anzahl der Kinder, das ist, was ich wollte.
Scharren durch die Flex-source-code, den ich nicht sehen, der Mechanismus, durch den die Einstellung minHeight=0 es zu arbeiten, wie ich wollte, also ich begrüssen Yarin fürs entdecken. Danke!
Legen Sie die Eigenschaften der Behälter:
Dann Ihre VBox sollte automatisch den clip, wenn es
percentHeight = 100
;Funktioniert bei mir in Flex 3.
Wenn Sie brauchen, um wirklich Lust, können Sie die scrollRect-auf Objekten:
je nachdem, was Sie brauchen, es zu tun.
In der Tat, Yarin Kessler brachte uns die einzige richtige Antwort hier
(leider habe ich nicht die Rechte an seinen Kommentar zu posten, deshalb mache ich es hier).
Wenn Ihr HBox sizing basiert auf einem prozentualen Wert, Sie sind in der Hoffnung, dass nur die container werden Einfluss auf seine Größe. Das ist falsch, es gibt eine andere Regel, eine stärkere.
Es ist die Tatsache, dass ein container (HBox ist) hat eine minimale Größe, die die neben der Standard/explicit Größen der seine eigenen childs Komponenten.
Wenn Ihr also einen prozentualen Wert zu einem Wert führen, der kleiner als die minimale Größe die minimale Größe gewinnt und auf der HBox. Da die HBox ist die Anzeige aller seiner Kinder, gibt es keine Notwendigkeit für Bildlaufleisten.
Also mit :
erzählen ist wie der HBox-das ist seine minimale Größe ist 0, statt seine Kinder Standard-Größen. Sie sind Sie neu zu definieren und auf diese Weise die minimale Größe kleiner ist als der prozentuale Wert, und verlieren die Schlacht.
Der einzige Satz, den ich gefunden in der Adobe-Dokumentation zu erklären, das ist dieses :
Hoffe, dass ich mich klar genug ausgedrückt,
(fühlen Sie sich frei zu korrigieren meine falsche englische Sätze...)