我有一个类似页面的flex应用程序。在我的主应用程序中是一个显示所有页面的持有者(画布)。问题是,当主应用程序启动时,装载在支架内的组件比支架大。支架高度设置为100%但是当我在他内部加载一个更大的组件然后他自己时,他仍然得到滚动条。
我该如何解决这个问题?如果它不可解决,如果我使用viewstack它会正常工作吗?
- 更新---
持有人看起来像这样:
<mx:canvas height="100%">
</canvas>
但是应用程序的结尾是500像素,所以画布高度是500像素高。现在我把一个新的孩子放在1000像素高的支架内。现在持有人高度应该是1000像素高
答案 0 :(得分:3)
在将组件添加到主画布之前,请检查子组件的大小,以查看它是否大于父组件。如果是,则可以在对象上使用scaleX和scaleY将其缩小以适合您定义的区域。
您在问题中声明的是任何弹性容器的默认行为...将更大的内容放入其中并且您将获得滚动条。要消除滚动条,请使用:
horizontalScrollPolicy="off"
verticalScrollPolicy="off
编辑:
在tabNavigator或viewStack上使用“resizeToContent”...或者您可以将父容器的宽度绑定到当前子容器的宽度。
答案 1 :(得分:1)
这是我用于自动调整大小画布的一些代码
//另存为AutoResizeCanvas.as
package
{
import mx.containers.Canvas;
import mx.core.Container;
import mx.core.UIComponent;
public class AutoResizeCanvas extends Canvas
{
public function AutoResizeCanvas()
{
super();
}
override protected function measure():void
{
super.measure();
var nh:int = 0;
var nw:int = 0;
for( var n:int = 0; n< this.numChildren; n++)
{
var c:UIComponent = this.getChildAt( n) as UIComponent;
if( c is Container)
{
var cc:Container= c as Container;
nh += /*cc.viewMetricsAndPadding.top + */cc.viewMetricsAndPadding.bottom + c.height;
nw = Math.max( nw, cc.viewMetricsAndPadding.left + cc.viewMetricsAndPadding.right + c.width);
}
else
{
nh += c.height;
nw = Math.max( c.width, nw);
}
}
this.measuredWidth = nw;
this.measuredHeight = nh;
}
}
}
//测试代码,粘贴到项目的主要mxml
中<?xml version="1.0" encoding="utf-8"?>
<mx:Application xmlns:mx="http://www.adobe.com/2006/mxml" layout="absolute" xmlns:local="*">
<mx:Script>
<![CDATA[
import mx.containers.Panel;
import mx.containers.HBox;
private function addOne():void
{
var hb:Panel = new Panel();
hb.height = 100;
hb.width = 100;
hb.y = rc.numChildren * 110;
rc.addChild( hb);
}
]]>
</mx:Script>
<local:AutoResizeCanvas id="rc" verticalScrollPolicy="off" borderStyle="solid"/>
<mx:Button x="497" y="10" label="Add HBox" click="addOne()"/>
</mx:Application>