10

垂直方向にのみスクロールできる Flex のキャンバスがあるため、キャンバスの属性を次のように設定します。

verticalScrollPolicy="auto" horizontalScrollPolicy="off"

ここでの問題は、垂直スクロールバーが表示されたときにコンテンツを覆ってしまうことです。ただし、水平方向には十分なスペースが残っています。コンテンツのサイズが自動的に調整されることを期待していました。

垂直スクロール ポリシーを「オン」に設定すると、コンテンツもカバーされません。

両方のスクロール ポリシーを「自動」に設定した場合、垂直スクロール バーでカバーされる領域にスクロールするためだけに水平スクロール バーも表示されます。

垂直スクロールバーが表示されているときにキャンバスのコンテンツを再レイアウトして、コンテンツを覆わないようにする方法はありますか?

4

5 に答える 5

16

バグです。回避策については、 Flex verticalScrollPolicy のバグを参照してください。

于 2008-11-15T18:05:22.830 に答える
4

この問題に関する補足事項: これは実際にはバグではなく、既知の (そして意図された?) 動作です:

「Flex は、スクロール ポリシーを明示的に に設定した場合にのみ、サイズの計算でスクロール バーを考慮します ScrollPolicy.ON。そのため、自動スクロール ポリシー (デフォルト) を使用すると、スクロール バーがボタンに重なります。この動作を防ぐには、 heightプロパティを設定できます。 HBox コンテナの場合、またはパーセンテージベースの幅を設定して HBox コンテナのサイズを変更できるようにします。HBox コンテナの高さを変更すると、アプリケーション内の他のコンポーネントが独自のサイズ規則に従って移動およびサイズ変更されることに注意してください。

-- Flex 3 ヘルプの「コンポーネントのサイズ設定」の「スクロール バーの使用」から

于 2008-11-16T16:52:40.073 に答える
3

Flex verticalScrollPolicy バグの回避策がうまくいかなかったため、この問題を解決するこの回避策Flex ScrollPolicy.AUTO Not Good Enoughを見つける必要がありました。

于 2011-02-25T11:19:33.817 に答える
2

vboxまたはコンテナに基づく別のコンポーネントで、その問題をそのように解決しました。

違う:

<mx:VBox width="100%" height="100%"
      verticalScrollPolicy="auto" horizontalScrollPolicy="off">
     <mx:Repeater dataProvider="{hede}">
          <custom:RenderItem ........../>
     </mx:Repeater>
</mx:VBox>

スクロールバーがない

作業バージョン:

<mx:VBox width="100%" height="100%"
    **minHeight="1"** horizontalScrollPolicy="off">
    <mx:Repeater dataProvider="{hede}">
        <custom:RenderItem ........../>
    </mx:Repeater>
</mx:VBox>
于 2011-08-18T07:38:13.870 に答える
0

私も。私は通常、Flex の verticalScrollBar に問題があるため、アプリケーション全体をスクロールするためにブラウザのスクロールバーを使用することを好みます。ここで回避策を見つけることができます: How to Resize the Flex Stage and Use the Browser Scrollbar .

私が使用するコード:

フレックスの場合:

ExternalInterface.call("setInitialFlashHeight", this.height);

私のHTML(JavaScript)では:

function setInitialFlashHeight(newHeight) {
    document.getElementById('my_flash').style.height = newHeight + 'px';
}

高さを追加 (または削除) したい場合:

function addFlashHeight(height) {
    var divHeight;
    var obj = document.getElementById('my_flash');

    if (obj.offsetHeight) {
        divHeight = obj.offsetHeight;
    } else if (obj.style.pixelHeight){
        divHeight = obj.style.pixelHeight;
    }

    var newHeight = divHeight + height;
    document.getElementById('my_flash').style.height = newHeight + 'px';
}

削除するには、「+」の代わりに「-」を使用します。

于 2010-03-16T15:24:54.967 に答える