我有一个关于UIScrollView的奇怪错误。这个视图工作正常,直到我从窗口中删除它(间接地,它是移除视图的子视图)。
然后我执行一些不相关的动画;当我将视图放在原来的位置时,scrollView的contentOffset已经改变了。
我在setContentOffset:function中放了一个断点,得到了以下堆栈:
#0 -[TestScrollView setContentOffset:] (self=0x915fbd0, _cmd=0x7fb34cd, contentOffset={x = 80, y = -0}) at /Users/../TestScrollView.m:19
#1 0x008670ea in -[UIScrollView(Static) _adjustContentOffsetIfNecessary] ()
#2 0x0085db55 in -[UIScrollView(UIScrollViewInternal) _stopScrollingNotify:dealloc:pin:] ()
#3 0x0084e6ff in -[UIScrollView _didMoveFromWindow:toWindow:] ()
#4 0x008444bb in -[UIView(Internal) _didMoveFromWindow:toWindow:] ()
#5 0x008444bb in -[UIView(Internal) _didMoveFromWindow:toWindow:] ()
#6 0x008444bb in -[UIView(Internal) _didMoveFromWindow:toWindow:] ()
#7 0x008444bb in -[UIView(Internal) _didMoveFromWindow:toWindow:] ()
#8 0x00840c72 in -[UIView(Hierarchy) _postMovedFromSuperview:] ()
#9 0x0083f4c6 in __UIViewWasRemovedFromSuperview ()
#10 0x0083f141 in -[UIView(Hierarchy) removeFromSuperview] ()
#11 0x00166573 in __98+[App MyAnimationLaunchingMethod]_block_invoke_0 ...
当scrollview从调用_adjustContentOffsetIfNecessary时更改其自己的contentOffset时,我看到了其他问题,例如在setFrame之后。 然而,它似乎没有任何意义,因为它的大小不会改变:它只是从屏幕上取下(以后再放回去)。所以没有理由改变它的偏移量。
对此有一些解释吗?某种方法可以防止这种变化?
我可以手动阻止(或恢复)偏移量变化,但是我正在寻找一个“干净”的解决方案(如果可用):它是从窗口中删除的整组视图。有时这个特殊的scrollView存在于视图树中,通常不会..因此动画类不应该知道scrollview。
有什么想法吗?
提前致谢
答案 0 :(得分:4)
有点骇客,但你可以在你的setContentOffset:
中进行测试,如果它已经从超级视图中删除,则只需返回。