2014-10-22 2 views
2

다른 UIScrollView 안에 하나의 UIScrollView이 있는데 둘 다 수직으로 스크롤됩니다. 내부 스크롤보기를 스크롤하려고 할 때 접촉이 외부 스크롤보기에 의해 나중에 선택되는 문제가 있습니다. 내부 스크롤 뷰를 독점적으로 처리해야하고 scrollViewDidScroll을 부모 스크롤 뷰에서 호출하지 않아야합니다.UIScrollView 내부의 UIScrollView - 텍스트 뷰의 경계에서 스크롤 뷰가 닿지 않습니까?

스크롤보기를 서브 클래스 화하고 hitTest:withEvent을 재정의하고 canCancelContentTouches을 설정하고 exclusiveTouch을 설정하면 아무런 효과가 없습니다. scrollViewDidScroll 메서드는 먼저 내부 메서드에서 실행 된 다음 외부 메서드에서 실행됩니다.

첫 번째 스크롤보기 후에 터치를 효과적으로 제거하고 응답자 체인을 바깥 쪽 스크롤보기로 전달하지 않으려면 어떻게해야합니까?

(FYI : 하위 계층에는 하위 뷰 컨트롤러가 있으므로 하위 스크롤 뷰에는 하위 뷰 컨트롤러가 포함되어 있으므로 내부 스크롤 뷰가 포함됨).

답변

0

Apple은이 문제 때문에 UIScrollView 안에 UIScrollView을 사용하는 것을 매우 어렵게 만듭니다. userInteractionEnabled = NO을 사용하여 사용자 상호 작용에서 스크롤보기 중 하나를 수동 및 조건부로 사용 중지하지 않으면 설정이 작동하지 않습니다.

그렇지 않으면 설정이 작동 할 때와 마찬가지로 치명적입니다. 제대로 작동하지 않을 것입니다.

+0

좋습니다. 좋은 조언입니다. 내 대안은 뭐니? 내부 스크롤보기는 실제로'UILabel'과 그 안에 다양한 양의 텍스트를 포함하고 있습니다.'UITextView'를 사용해 보았지만 똑같은 문제가있었습니다. – Luke

+0

@lukech'setContentOffset'을 호출하여 수동으로 'UIScrollView'를 스크롤하여 시스템을 트릭 할 수 있습니다. 그러면 스크롤되는 것처럼 보이거나 전체 구조를 다시 생각해 볼 수 있으며 어떻게 작동하지 않을지 생각할 수 있습니다. –

+0

터치가 체인 위로 전달되지 않으면 확실히 작동합니다. 내부 스크롤보기는 상단보기의 맨 아래에 있습니다. 즉, 아래로 스크롤하여 아무 문제없이 스크롤 할 수 있습니다. 상단을지나 위로 스크롤하면 외부 스크롤보기에 영향을줍니다. 나는 다른 애플 리케이션이 이것을 확실히하는 것을 보았다. – Luke

0

Apple은 확실히 UIScrollView 내에서 UIScrollView를 권장하지 않습니다. 실제로 문서에 있습니다 :

응용 프로그램에서 중첩 스크롤을 지원하기 위해 어떤 작업도 수행 할 필요가 없습니다. 지원되며 기본적으로 제공됩니다. https://developer.apple.com/library/content/documentation/WindowsViews/Conceptual/UIScrollView_pg/NestedScrollViews/NestedScrollViews.html

당신이 스크롤에서 부모 스크롤 뷰를 사용하지 않으려면

, 당신은 아마 아이로부터 통지를 보내고, 부모에 isScrollEnabled을 설정할 수 있습니다.