Flex:防止滚动条在自动显示时覆盖内容

时间:2008-11-15 17:52:34

标签: flex scrollbar

我在Flex中有一个画布,只能在垂直方向滚动,所以我按如下方式设置画布的属性:

verticalScrollPolicy="auto" horizontalScrollPolicy="off"

这里的问题是垂直滚动条在出现时覆盖了内容 - 尽管剩下足够的水平空间。我原本预计内容大小会自动调整。

将垂直滚动策略设置为“on”时,也不会涵盖任何内容。

如果我将两个滚动策略都设置为'auto',我还会得到一个水平滚动条,只是滚动到垂直滚动条覆盖的区域。

是否有一种解决方法,当显示垂直滚动条时,如何重新布局画布的内容,使其不包含任何内容?

5 个答案:

答案 0 :(得分:16)

这是一个错误。有关解决方法,请参阅 Flex verticalScrollPolicy bug

答案 1 :(得分:4)

关于这个问题只是一个侧面说明:它实际上不是一个错误,但已知(并且打算?)行为:

  

“Flex仅在您的大小计算中考虑滚动条   显式设置滚动策略   ScrollPolicy.ON。所以,如果你使用   自动滚动策略(默认),.   滚动条与按钮重叠。至   防止这种行为,你可以设置   HBox容器的height属性   或允许HBox容器调整大小   通过设置基于百分比的宽度。   请记住,改变高度   HBox容器导致其他容器   要移动的应用程序中的组件   并根据自己的大小调整   调整规则。“

- 来自Flex 3帮助中的Sizing Components,在“使用滚动条”下

答案 2 :(得分:3)

我必须找到解决此问题的解决方法Flex ScrollPolicy.AUTO Not Good Enough,因为Flex verticalScrollPolicy bug解决方法对我不起作用。

答案 3 :(得分:2)

在vbox或基于Container的其他组件上,我解决了这个问题。

错:

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

答案 4 :(得分:0)

我也是。我通常在Flex中使用verticalScrollBar有一些问题,所以我更喜欢使用浏览器的滚动条来滚动整个应用程序。您可以在此处找到解决方法:How to Resize the Flex Stage and Use the Browser Scrollbar

我使用的代码:

在Flex中:

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

要删除,请使用“ - ”代替“+”。