2011-10-09 4 views
7

나는 UIWebView 안에 UIScrollView을 가지고 있습니다.UIScrollView로 UIWebView 스크롤을 전달하는 방법은 무엇입니까? (조건부)

생각는 사용자가 위쪽으로 웹 페이지를 스크롤 할 때 화면에 더 많은 독서 공간을 만들 할 수있을 것입니다 - 도구 모음이 표시 위쪽까지있는 UIScrollView를 스크롤하고 도구 모음 nomore 볼 수 있습니다 분명히 할 때 실제로 스크롤 페이지에 더 많은 콘텐츠를 표시하는 웹 페이지

아이폰 Safari 브라우저는 똑같은 기능을합니다.

기본 동작에 대한 스크린 샷 (첫 번째보기) - 내가 생각하기에 : 스크롤/스크롤이 webview 영역에서 직접 발생하기 때문에 스크롤 메시지가 웹 뷰에서 사용됩니다.

여기서 내가하고 싶은 것은 programicallyicaly가 UIScrollivew에 '상향 스크롤'을 전달할시기와하지 않을 때를 결정하는 것입니다.

이 문제를 해결하는 방법에 대한 정보는 매우 유용 할 것입니다. 감사!! 당신은 다른 아래에있는 UIScrollView 하나에서 정보 검색 및있는 UIWebView를 추가 할 수 있습니다

enter image description here

답변

0

enter image description here

. webview가 스크롤 될 때 컨텐츠 오프셋을 얻으려면 다음 코드 스 니펫을 사용할 수 있습니다.

UIScrollView* currentScrollView; 
for (UIView* subView in testWebView.subviews) { 
    if ([subView isKindOfClass:[UIScrollView class]]) { 
     currentScrollView = (UIScrollView*)subView; 
     currentScrollView.delegate = (id)self; 
    } 
} 

이제 기본 스크롤 뷰 오프셋의 y 값을 scrollview 디 스크 롤 대리자 메소드에서 가져온 오프셋 값으로 변경할 수 있습니다.

2

UIWebView class reference이있는 UIScrollView에있는 UIWebView를 내장 낙담 : 중요

을 : 당신은 있는 UIScrollView 객체에있는 UIWebView 또는 jQuery과 오브젝트를 포함하지 않아야합니다. 그렇게하면 두 개체에 대한 터치 이벤트가 혼합되어 잘못 처리 될 수 있으므로 예기치 않은 동작이 발생하여 이 잘못 처리 될 수 있습니다. 나는 여전히 기능을 ;-) 구현한다고 가정하지만

아이디어 1 :로 DOM을 수정하는 대신있는 UIWebView의 stringByEvaluatingJavaScriptFromString: 방법을 사용하여 자바 스크립트를 실행하는있는 UIScrollView에있는 UIWebView를 포함하지 마십시오 아래에 툴바를 추가하십시오. 필요한 경우 사용자 정의 URL 스킴을 등록하여 툴바에 푸시 된 버튼에서 콜백 objective-c 코드를 사용할 수 있습니다.

아이디어 2 : UIWebView를 UIScrollView에 포함시키지 말고 일반 UIView에 포함 시키십시오. Vignesh의 제안을 바탕으로, callback이 호출 될 때마다 contentOffsetcontentSize의 신장을 비교하여 위임자를 통해 webView의 내부 scrollView의 scrollViewDidScroll: 콜백을 수신 대기합니다. 그들이 동등하면, 그것은 당신이 바닥에 있다는 것을 의미합니다. 이런 일이 발생하면 툴바의 프레임에 애니메이션을 적용하여 포함 된 UIView를 "입력"하고 WebView 프레임을 "밀어"이동할 수 있습니다.

아이디어 3 : Apple 권장 사항을 무시하고 UIWebView를 UIScrollView에 포함하십시오. Vignesh의 제안을 바탕으로, callback이 호출 될 때마다 contentOffsetcontentSize의 신장을 비교하여 위임자를 통해 webView의 내부 scrollView의 scrollViewDidScroll: 콜백을 수신 대기합니다. 그들이 동등하면, 그것은 당신이 바닥에 있다는 것을 의미합니다. 이 문제가 발생하면 webView의 userInteractionEnabled 속성을 NO로 설정하고 webView 및 도구 모음이 포함 된 scrollView에서 YES로 설정하십시오. 스크롤이 원활하게 계속되기를 바랍니다. 물론 userInteractionEnabled을 언제 되돌릴지를 결정하기 위해 동일한 방법으로 포함하는 스크롤 뷰를 들어야합니다.

이 아이디어의 변형은 webView의 경우 userInteractionEnabled을 NO로 설정하는 것이지만 webView의 프레임 높이를 contentSize와 일치하도록 설정하고 이에 따라 포함하는 scrollView의 contentSize를 확대합니다.

두 변형에는 어떤 경우에는 링크를 클릭하는 등의 일을 할 수 없다는 단점이 있습니다 .- 그러나 (아마도 어쩌면 그것으로 충분할 수도 있습니다.) 적어도 첫 번째 변형에서는 너무 나쁘지 않습니다.

관련 문제