2012-12-05 2 views
3

UIScrollView와 관련된 이상한 버그가 있습니다. 이보기는 창에서 제거 할 때까지 제대로 작동합니다 (간접적으로, 제거 된보기의 하위보기입니다).UIScrollview contentOffset이 창에서 제거되면 변경됩니다.

그런 다음 관련없는 애니메이션을 수행합니다. 스크롤 막대의 위치를 ​​변경하면 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 ... 

있는 ScrollView가 setFrame 후 예를 들어, _adjustContentOffsetIfNecessary를 호출하여 자신의 contentOffset가 변경 될 때 나는 다른 질문을보고합니다. 그러나 크기가 변경되지 않으므로 여기에는 아무런 의미가없는 것처럼 보입니다. 단지 화면에서 벗어나기 만하면됩니다 (나중에 다시 적용해야 함). 따라서 오프셋을 변경해야 할 이유가 없습니다.

이에 대한 설명이 있습니까? 이 변화를 막기위한 어떤 방법?

수동으로 오프셋 변경을 차단 (또는 복원) 할 수 있지만 사용 가능한 경우 "깨끗한"솔루션을 찾고 있습니다 : 창에서 제거 된 전체보기 그룹입니다. 때로는이 특정 scrollView가 뷰 트리에 표시됩니다. 보통 애니메이션 클래스는 스크롤 뷰에 대해 알지 못합니다.

아이디어가 있으십니까? 사전에

감사

답변

4

해킹의 종류,하지만 당신은 당신의 setContentOffset:에서 테스트를 넣고는 이미 수퍼에서 제거 된 경우 간단하게 반환 할 수 있습니다.

+0

조금 해킹되었지만 현재 상황에서 가장 깨끗한 해결책 인 것 같습니다. 감사 ! –

관련 문제