通常一个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被遮挡的问题。