4

UIScrollView に関する奇妙なバグがあります。このビューは、ウィンドウから削除する瞬間まで正常に機能します (間接的に、削除されたビューのサブビューです)。

次に、無関係なアニメーションを実行します。ビューを元の場所に配置すると、scrollView の contentOffset が変更されました。

setContentOffset: 関数にブレークポイントを設定し、次のスタックを取得しました。

#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 ...

たとえば setFrame の後で、scrollview が独自の contentOffset を _adjustContentOffsetIfNecessary への呼び出しから変更するときに、他の質問を見ました。ただし、サイズが変わらないため、ここでは意味がないようです。画面から取り外されているだけです(後で元に戻します)。したがって、オフセットを変更する理由はありません。

これには説明がありますか?この変更を防ぐ方法はありますか?

オフセットの変更を手動でブロック (または復元) できますが、可能な場合は「クリーンな」ソリューションを探しています。それは、ウィンドウから削除されるビューのグループ全体です。この特定の scrollView がビュー ツリーに存在する場合もありますが、通常は存在しません。そのため、アニメーション クラスはスクロールビューについて認識してはなりません。

何か案が ?

前もって感謝します

4

1 に答える 1

4

一種のハックですが、テストを入れてsetContentOffset:、スーパービューから既に削除されている場合は単に戻ることができます。

于 2012-12-05T18:04:02.197 に答える