Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/flash/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Apache flex 在Flex中调整容器大小的最佳方法是只服从父容器';显式维度_Apache Flex_Flash_Layout - Fatal编程技术网

Apache flex 在Flex中调整容器大小的最佳方法是只服从父容器';显式维度

Apache flex 在Flex中调整容器大小的最佳方法是只服从父容器';显式维度,apache-flex,flash,layout,Apache Flex,Flash,Layout,我在Flex上遇到这个问题已经将近一年了,每次我都会想出一个暂时有效的快速黑客解决方案。我想看看是否有人有更好的主意 以下是问题的条件: |------Container ------------| | explicitHeight: 400 (or whatever) | | | |-------- VBox -------| | | | percentHeight: 100 | | | |

我在Flex上遇到这个问题已经将近一年了,每次我都会想出一个暂时有效的快速黑客解决方案。我想看看是否有人有更好的主意

以下是问题的条件:

|------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;
}
请告诉我有更好的方法。

您必须使用VBox上的“autoLayout”参数,如文档所示:

默认情况下,VBox容器的大小足以使图像保持原始大小。如果禁用布局更新,使用缩放效果放大图像,或使用移动效果重新定位图像,则图像可能会超出VBox容器的边界。

您将autoLayout属性设置为false,因此VBox容器不会随着图像大小的调整而调整大小。如果图像的大小增长到超出VBox容器的边界,则容器会添加滚动条并在其边界处剪辑图像。


我希望这将对您有所帮助。

设置容器的属性:

clipContent = true;
verticalScrollPolicy = "off"
然后,当VBox具有
percentHeight=100
时,它将自动剪辑

在Flex 3中为我工作

如果您需要获得真正的乐趣,可以在对象上设置scrollRect:

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

取决于您需要它做什么。

设置minHeight=0就是您需要做的全部

这会告诉VBox在调整自身大小时忽略其子对象的测量值,并根据其自身/父对象的约束计算其高度。按正常方式设置其他所有内容,滚动和其他所有内容都将正常工作


一年前花了几天的时间在这一点上-这不是直观的,他们可能会更好地命名该属性。希望这能为你们节省一些时间…

AutoLayout=false似乎只会防止在孩子的大小发生变化时重新运行布局。但是,如果添加或删除孩子,布局仍将重新运行

设置minHeight=0确实会将VBox的(外部)大小与子对象的大小和数量完全断开,这正是我想要的


翻阅Flex源代码时,我没有看到设置minHeight=0使其按我所希望的方式工作的机制,因此我向发现它的Yarin致敬。谢谢!

事实上,Yarin Kessler在这里为我们提供了唯一正确的答案 (不幸的是,我没有权利评论它的帖子,这就是我在这里发表评论的原因)

当你的HBox大小是基于一个百分比值时,你希望只有它的容器会影响它的大小。这是错误的,还有另一个规则,一个更强的规则。 事实上,一个容器(HBox是)有一个最小的大小,这是它自己的子组件的默认/显式大小的增加

因此,如果您的百分比值导致值小于最小大小,则最小大小将获胜并应用于HBox。由于HBox显示其所有子项,因此不需要滚动条

因此,使用:

minHeight = 0;
minWidth = 0;
就像告诉HBox,它的最小大小是0,而不是它的子代默认大小。你正在重新定义它,这样最小大小就会小于百分比值,从而输掉这场战斗

我在Adobe文档中找到的唯一解释这一点的短语是:

建议使用基于百分比的容器大小。Flex使容器足够大,以满足其子容器的最小尺寸

希望我说清楚


(请随意更正我不正确的英语句子……

另一个Flex毫无意义的例子。我倾向于保留这些事情的清单……如果我们有机会见面,我欠你一杯你选择的饮料。是的!谢谢你的回答。