7

私は Flex でこの問題に 1 年近く遭遇してきましたが、そのたびに当分の間機能する簡単なハック ソリューションを考え出しています。誰かがより良いアイデアを持っているかどうかを確認したいと思います。

問題の条件は次のとおりです。

|------Container  ------------|
|  explicitHeight:  400 (or whatever)
|                             |
|  |-------- VBox  -------|   |
|  |  percentHeight: 100  |   | 
|  |                      |   |
|  |  |-Repeater------|   |   |
|  |  | Potentially   |   |   |
|  |  | a lot of stuff.   |   |
|--|--|---------------|---|---|

問題は、私が望んでいることとは反対に、親の明示的な高さに固執してスクロールバーを作成するのではなく、VBox が常にその内部のコンテンツに対応するように拡張されることです。

私の解決策は、親への参照でハードコードすることでした(または、パーセンテージではなく明示的に設定された値を見つけるために表示リストのはるか上に行く必要があります)。

これをユーティリティクラスで使用することも検討しました:

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;
}

もっと良い方法があることを教えてください。

4

5 に答える 5

13

minHeight = 0 を設定するだけで十分です。

これにより、VBox は、それ自体のサイズを変更するときに子の測定値を無視し、代わりにそれ自身/親の制約に基づいて高さを計算するように指示されます。他のすべてを通常どおりに設定すると、スクロールと他のすべてが完全に機能します。

1年前にこれに何日も費やしました-直感的ではありません。おそらく、プロパティにもっと良い名前を付けることができたでしょう。これで時間を節約できることを願っています...

于 2008-12-17T16:32:47.607 に答える
8

ドキュメントが言うように、VBox で「autoLayout」パラメーターを使用する必要があり

ます。画像を拡大したり、Move 効果を使用して画像の位置を変更したりすると、画像が VBox コンテナーの境界を超えて拡張

される場合があります.autoLayout プロパティを false に設定すると、画像のサイズが変更されても VBox コンテナーのサイズは変更されません.画像が大きくなる場合VBox コンテナーの境界を超えて拡張されるようにサイズを変更すると、コンテナーはスクロール バーを追加し、その境界で画像をクリップします。

それがあなたを助けることを願っています。

于 2008-10-29T10:40:02.963 に答える
2

AutoLayout = falseは、子のサイズが変更されたときにのみレイアウトが再実行されるのを防ぐようです。ただし、子を追加または削除すると、とにかくレイアウトが再実行されます。

minHeight = 0を設定すると、VBoxの(外側の)サイズが子のサイズと数から完全に切り離されます。これは私が望んでいたことです。

Flexのソースコードを調べてみると、minHeight = 0を設定することで期待どおりに機能するメカニズムがわかりませんでした。そこで、Yarinにそれを発見してくれたことに敬意を表します。ありがとう!

于 2009-01-06T17:54:00.740 に答える
1

コンテナのプロパティを設定します。

clipContent = true;
verticalScrollPolicy = "off"

次に、VBox が次の場合に自動的にクリップする必要がありpercentHeight = 100ます。

Flex 3 で動作します。

本当に凝ったものにする必要がある場合は、オブジェクトに scrollRect を設定できます。

scrollRect = new Rectangle(x, y, w, h);

何をする必要があるかによって異なります。

于 2008-11-06T01:13:11.993 に答える
0

実際、Yarin Kessler がここで唯一の正しい答えを教えてくれました (残念ながら、私にはその投稿にコメントする権利がありません。そのため、ここでコメントしています)。

HBox のサイズ設定がパーセンテージ値に基づいている場合、そのコンテナーのみがそのサイズに影響を与えることを望んでいます。それは間違っています。別のルールがあります。より強力なルールです。コンテナ (HBox と同じ) のサイズは最小であり、それ自体の子コンポーネントのデフォルト/明示的なサイズが追加されているという事実です。

したがって、パーセンテージ値が最小サイズよりも小さい値になる場合、最小サイズが優先され、HBox に適用されます。HBox はすべての子を表示しているため、スクロールバーは必要ありません。

だから使用:

minHeight = 0;
minWidth = 0;

子のデフォルト サイズではなく最小サイズが 0 であることを HBox に伝えるようなものです。あなたはそれを再定義していて、そのように最小サイズはパーセンテージ値よりも小さく、戦いに負けます.

これを説明するアドビのドキュメントで見つけた唯一のフレーズは次のとおりです。

パーセンテージ ベースのコンテナ サイズは推奨事項です。Flex は、コンテナーを、その子の最小サイズに収まる十分な大きさにします。

私が自分自身を明確にしたことを願っています、

(間違った英語の文章を自由に修正してください...)

于 2013-02-12T13:47:03.947 に答える