Apache flex 在Flex中调整容器大小的最佳方法是只服从父容器';显式维度
我在Flex上遇到这个问题已经将近一年了,每次我都会想出一个暂时有效的快速黑客解决方案。我想看看是否有人有更好的主意 以下是问题的条件:Apache flex 在Flex中调整容器大小的最佳方法是只服从父容器';显式维度,apache-flex,flash,layout,Apache Flex,Flash,Layout,我在Flex上遇到这个问题已经将近一年了,每次我都会想出一个暂时有效的快速黑客解决方案。我想看看是否有人有更好的主意 以下是问题的条件: |------Container ------------| | explicitHeight: 400 (or whatever) | | | |-------- VBox -------| | | | percentHeight: 100 | | | |
|------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毫无意义的例子。我倾向于保留这些事情的清单……如果我们有机会见面,我欠你一杯你选择的饮料。是的!谢谢你的回答。