Quantcast
Channel: Cocos中文社区 - 最新主题
Viewing all articles
Browse latest Browse all 90492

关于ScrollView的bug,从v2.4.8-v3.5.0都存在,附demo

$
0
0

问题演示

如下图所示
ScrollView初始content的高度为800,改为1000,然后滚动到最底部,再改为800,然后点击一次ScrollView,便会触发一次不该有的向上的自动滚动。

两个版本demo

ScrollView-Bug2.4.8.zip (811.7 KB)
ScrollView-Bug3.5.0.zip (1.6 MB)

导致问题的原因

看了ScrollView的源码后发现了以下几点。

  1. 超出边界的差值会记录在_outOfBoundaryAmount里,但是这个_outOfBoundaryAmount不是每次检测边界时都更新的,它需要_outOfBoundaryAmountDirty为true才会更新
  2. 在content size改变的时候,ScrollView会检测content有没有超出边界,此时会更新_outOfBoundaryAmount并直接修改content坐标。但是修改完content坐标之后_outOfBoundaryAmount记录的仍旧是旧值,此时_outOfBoundaryAmountDirty为false。
  3. ScrollView在touchend的时候会触发检测当前有没有超出边界,有的话自动回弹滚动。由于_outOfBoundaryAmountDirty为false,所以并未更新_outOfBoundaryAmount,而是直接取错误的_outOfBoundaryAmount作为超出边界的值,然后进行错误的自动回弹。

最后

因为在项目中需要去实时修改content的size,所以遇到了这个问题。
我对此问题的解决方案是监听content的坐标改变,然后设置_outOfBoundaryAmountDirty为true,这样就能及时更新_outOfBoundaryAmount了。

1 个帖 - 1 位参与者

阅读整个主题


Viewing all articles
Browse latest Browse all 90492

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>