首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Flex 4 <s:Scroller>重新计算范围?

Flex 4 <s:Scroller>重新计算范围?
EN

Stack Overflow用户
提问于 2012-08-02 17:34:10
回答 1查看 688关注 0票数 3

我正在构建一个Flex 4应用程序,它使用<s:Scroller>组件垂直滚动覆盖的内容。在我提出问题之前,让我先解释一下发生了什么:

  1. 页的主体是从数据库中加载的。
  2. 一旦加载了信息,应用程序的“主体”(在本例中是下面看到的项目列表)将被构造。
  3. 一旦构建了列表,整个封装组件就会使用TweenMax转换为视图,如下所示: myComponent.visible = true;TweenMax.to(myComponent,1,{ alpha : 1,y -= 20 //将组件从原来的位置向上滑动20 up );

下面是结果。请注意滚动条是如何向下滚动的,但是您可以看到一些在最下面被切断的白字的提示。

使用我的自定义菜单,我可以从页面导航,然后返回到它,Flex将正确地重新计算滚动体的范围,这样我就可以向下滚动并看到所有想要的内容。只有当用户输入的初始 URL是一个更长的页面时才会发生此问题。

对于如何迫使Flex重新计算滚动体的范围,有什么想法吗?

谢谢您抽时间见我。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-08-11 16:02:05

好吧,经过几个小时的研究,拼凑,试错,这就是我想出来的。

我做错了什么:

当我第一次发布这个问题时,我提到的“组件”已经作为<s:Scroller>的子元素添加了,但是被折叠并隐藏起来,如下所示:

代码语言:javascript
复制
<comp:MyComp alpha="0" height="0" visible="false"/>

当数据被加载,组件的可视外观将恢复并转换到适当的位置时,如下所示:

代码语言:javascript
复制
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()方法根据需要添加和删除它们。现在,随着旧的元素被转移,新的元素取代了它们,滚动体重新调整了自身的大小。

最后一个问题是我所面临的。如果用户正在查看的第一页(即没有以前的组件被转换和销毁)需要一个滚动体,它就不会出现。

我更正了最后一个问题,添加了一个事件侦听器,当新组件完成转换到适当的位置时,该监听器会监听。在事件处理程序中,我使用以下代码显式设置组件的高度:

代码语言:javascript
复制
newComp.height = NaN;
newComp.invalidateSize();
newComp.height = newComp.measuredHeight;

既然组件有了显式的高度,现在就会出现滚动体,即使它是第一页。

现在,滚动体在所有情况下都能正常工作,不会切断任何内容,也不会在不应该的情况下消失。

我希望这对某人有帮助。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/11782810

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档