UIWebView class reference zniechęca osadzanie UIWebView w UIScrollView:
Ważne: Nie należy osadzić UIWebView lub UITableView obiektów w obiektów UIScrollView. Jeśli to zrobisz, nieoczekiwane zachowanie może spowodować , ponieważ zdarzenia dotykowe dla obu obiektów mogą być pomieszane i niepoprawnie przetwarzane .
Jednak przypuszczam, że nadal chcą realizować swoją funkcję ;-)
Idea 1: Nie osadzić UIWebView w UIScrollView, zamiast uruchomić skrypt przy użyciu metody UIWebView za stringByEvaluatingJavaScriptFromString:
, modyfikowania DOM na dodaj pasek narzędzi poniżej. Jeśli jest to wymagane, możesz wywołać kod celu C z dowolnego przycisku wciśniętego na pasku narzędzi, rejestrując niektóre niestandardowe schematy URL.
Idea 2: Nie umieszczaj UIWebView w UIScrollView, ale w zwykłym UIView. Opierając się na sugestii Vignesh, słuchaj wewnętrznego wywołania zwrotnego viewView za pomocą delegata, sprawdzając wzrost contentOffset
w porównaniu do wzrostu contentSize
za każdym razem, gdy wywoływany jest wywołanie zwrotne. Gdy są równe, oznacza to, że dostałeś się na sam dół. Kiedy to nastąpi, możesz animować ramkę paska narzędzi, aby "wejść" do zawierającego UIView i "wypchnąć" ramkę webView.
Idea 3: Ignoruj zalecenie Apple i osadzaj UIWebView w UIScrollView. Opierając się na sugestii Vignesh, słuchaj wewnętrznego wywołania zwrotnego viewView za pomocą delegata, sprawdzając wzrost contentOffset
w porównaniu do wzrostu contentSize
za każdym razem, gdy wywoływany jest wywołanie zwrotne. Gdy są równe, oznacza to, że dostałeś się na sam dół. Gdy tak się stanie, ustaw właściwość webView na NO i ustaw ją na YES na scrollView, który zawiera webView i pasek narzędzi. Mam nadzieję, że zwój będzie kontynuowany wystarczająco płynnie. Oczywiście musisz odsłuchiwać zawierający przewijany widok w ten sam sposób, aby określić, kiedy ponownie włączyć userInteractionEnabled
.
Wariacją tego pomysłu byłoby po prostu ustawić userInteractionEnabled
na NIE dla webView, ale ustawić wysokość ramki webView tak, aby pasowała do jej contentSize, a także odpowiednio powiększyć contentSize zawierającego scrollView.
Oba warianty mają tę wadę, że w niektórych przypadkach nie będziesz w stanie robić takich rzeczy, jak klikanie linków :-(Ale może to wystarczy dla twojej sprawy.Nawet w pierwszej wersji nie jest tak źle.