[ALL-1182] PanModal 내 tableView를 스크롤 중일 때 tableView 업데이트 시 간헐적으로 발생하는 크래시 수정 #1
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
개요
재현 방법
원인
panModal은 panModal과 scrollView간의 부드러운 트랜지션을 위해서 KVO를 이용해서 scrollView의 contentOffset의 변경을 감지하고 didPanOnScrollView 메소드로 scrollViewYOffset을 추적하여 값을 저장합니다.
스크롤 중 테이블 뷰의 스크롤 뷰가 업데이트 되면 (특히 n개 남았어요 UI가 노출되면서 presentedView의 높이가 증가하는 경우) presentedView frame의 minY의 값이 줄어듭니다.
줄어든 minY값은 didPanOnScrollView 메소드가 scrollViewYOffset의 추적을 멈추고 scrollViewYOffset 위치로 스크롤하도록 합니다.(이때 의도와 다르게 동작하게 되는 것 같음 그렇게 생각하는 이유는 정상 작동 시 추적을 멈추는 경우는 스크롤뷰를 아래로 내려서 panModal을 dismiss하려고 할 때 혹은 최하단 스크롤 후 화면에서 손을 떼서 바운스로인해 제자리로 찾아갈 때여서)
scrollViewYOffset 위치로 스크롤하도록 할 때 scrollViewYOffset이 실제 offset인 scrollView.contentOffset.y보다 값이 큰 상태입니다. 위 programatic한 스크롤은 스크롤 변경을 감지하는 KVO를 재귀적으로 호출하게 되면서 크래시가 발생합니다.
이를 방지하기 위해 scrollViewYOffset는 실제 offset보다 작거나 같아야 합니다.
작업 내용
기타
참조