cc.ScrollView的一个坑

通常一个ScrollView的结构如图中所示,其中view节点上挂载有cc.Mask和cc.Widget组件,cc.Widget组件用于控制view节点相对于scrollview节点的size。

cc.ScrollView中有4个私有变量,_leftBoundary、_rightBoundary、_topBoundary和_bottomBoundary,它们在_calculateBoundary中被重新计算更新,并且其结果依赖于view节点也就是content的父节点的size。

对于view节点,Widget组件使得其size可以随scrollview节点size变化而变化,这就决定了view节点size的变化是滞后于scrollview节点的。

那么问题来了,如果view节点的size在被cc.Widget改变之前,cc.ScrollView中的_calculateBoundary方法被调用,那么计算出来的_xxxBoundary变量的值就是错误的,后果就是cc.ScrollView对滚动边界判断错误,当content下有多个item的时候,就可能出现首尾有空白或者首尾部分item被遮挡的问题。

请问什么情况下会发生这个问题?方便提供一个 Demo 吗?

你改变scrollview的size,不会改变view的size,这不是bug,这个就是这样设计的。你可以把这个当作是设计缺陷,你自己调整view的大小就好了。

确实,我也觉得标题有点不妥

不好意思,新建了一个场景,但是没能重现……
根据我们的测试结果,只有具有特定屏幕分辨率的设备才有这个问题,creator版本是1.7.2。
希望可以在后续版本的creator中规避掉该问题。