我正在构建一个Flex 4应用程序,它使用<s:Scroller>组件垂直滚动覆盖的内容。在我提出问题之前,让我先解释一下发生了什么:
下面是结果。请注意滚动条是如何向下滚动的,但是您可以看到一些在最下面被切断的白字的提示。
使用我的自定义菜单,我可以从页面导航,然后返回到它,Flex将正确地重新计算滚动体的范围,这样我就可以向下滚动并看到所有想要的内容。只有当用户输入的初始 URL是一个更长的页面时才会发生此问题。
对于如何迫使Flex重新计算滚动体的范围,有什么想法吗?
谢谢您抽时间见我。

发布于 2012-08-11 16:02:05
好吧,经过几个小时的研究,拼凑,试错,这就是我想出来的。
我做错了什么:
当我第一次发布这个问题时,我提到的“组件”已经作为<s:Scroller>的子元素添加了,但是被折叠并隐藏起来,如下所示:
<comp:MyComp alpha="0" height="0" visible="false"/>当数据被加载,组件的可视外观将恢复并转换到适当的位置时,如下所示:
myComp.visible = true;
myComp.height = NaN;
myComp.invalidateSize();
myComp.height = myComp.measuredHeight;
TweenMax.to(myComp, 1, {
alpha : 1,
y -= 20 //Slides the component up 20px from its original location
});这种方法直到后来才强制<s:Scroller>重新计算其适当的大小,有时直到myComp被转换掉,并且使用相同的方法将另一个组件转换到适当的位置。即使如此,滚动体的大小也符合上一个组件的大小,而不是当前显示的组件的大小。
现在,我正确地做了什么:
我的研究表明,每当addElement()方法被调用时,无论是直接在<s:Scroller>内部还是由它的任何一个子类调用,都会调用scroller的measure()方法,并适当地重新调整滚动体的大小。
我没有将组件放置在滚动体中,而是简单地隐藏它们直到我需要它们,而是在ActionScript中动态创建它们,设置它们的属性,并分别使用addElement()和removeElement()方法根据需要添加和删除它们。现在,随着旧的元素被转移,新的元素取代了它们,滚动体重新调整了自身的大小。
最后一个问题是我所面临的。如果用户正在查看的第一页(即没有以前的组件被转换和销毁)需要一个滚动体,它就不会出现。
我更正了最后一个问题,添加了一个事件侦听器,当新组件完成转换到适当的位置时,该监听器会监听。在事件处理程序中,我使用以下代码显式设置组件的高度:
newComp.height = NaN;
newComp.invalidateSize();
newComp.height = newComp.measuredHeight;既然组件有了显式的高度,现在就会出现滚动体,即使它是第一页。
现在,滚动体在所有情况下都能正常工作,不会切断任何内容,也不会在不应该的情况下消失。
我希望这对某人有帮助。
https://stackoverflow.com/questions/11782810
复制相似问题