Czy ktoś wie, jak zatrzymać odbijanie UIWebView w pionie? Mam na myśli, gdy użytkownik dotknie ekranu iPhone'a, przeciągnie palcem w dół, a widok strony internetowej pokaże puste miejsce nad stroną, którą załadowałem?
Sprawdziłem następujące możliwe rozwiązania, ale żadne z nich nie działało dla mnie:
ios
objective-c
iphone
uiscrollview
uiwebview
Brad Parks
źródło
źródło
Odpowiedzi:
... wydaje się działać dobrze.
Zostanie również przyjęty do App Store.
Aktualizacja : w iOS 5.x + istnieje prostszy sposób -
UIWebView
mascrollView
właściwość, dzięki czemu kod może wyglądać następująco:To samo dotyczy
WKWebView
.źródło
UIWebView
móc dzwonić w[webView setBounces:NO]
dowolnym miejscu.Patrzyłem na projekt, który ułatwia tworzenie aplikacji internetowych jako pełnoprawnych aplikacji do zainstalowania na iPhonie, o nazwie QuickConnect , i znalazłem rozwiązanie, które działa, jeśli nie chcesz, aby ekran był w ogóle przewijalny, co w moim przypadku Ja nie.
W wyżej wspomnianym poście dotyczącym projektu / blogu wspominają o funkcji javascript, którą można dodać, aby wyłączyć odbijanie, co zasadniczo sprowadza się do tego:
Jeśli chcesz dowiedzieć się więcej o tym, jak to zaimplementować, po prostu pobierz QuickConnect i sprawdź ... Ale w zasadzie wszystko, co robi, to wywołanie javascript na stronie ładowania ... Próbowałem po prostu umieścić go w nagłówku mojego dokumentu, i wydaje się, że działa dobrze.
źródło
Cóż, wszystko co zrobiłem, aby to osiągnąć, to:
Działa dobrze dla mnie ... Również zaznaczona odpowiedź na to pytanie jest taka, że Apple odrzuci, jeśli użyjesz go w aplikacji na iPhone'a.
źródło
UIScrollView
jest to pierwszy przegląd,UIWebView
który może tak być na razie, ale może to łatwo zmienić w przyszłych (nawet drobnych) aktualizacjach iOS lub określonych konfiguracjach. Powinieneś naprawdę zrobićfor
iterację,subviews
aby ją znaleźćUIScrollView
(to naprawdę nie jest tak dużo pracy i przynajmniej masz gwarancję, że dostanieszUIScrollView
i nie zawiesisz swojego programu ...W zestawie iOS 5 SDK można uzyskać dostęp do widoku przewijania powiązanego z widokiem internetowym, zamiast iterować jego widoki podrzędne.
Aby wyłączyć „odbijanie” w widoku przewijania, możesz użyć:
Zobacz Odwołanie do klasy UIWebView .
(Jeśli jednak potrzebujesz obsługi wersji SDK przed 5.0, powinieneś postępować zgodnie z radą Mirka Rusina .)
źródło
Szybki 3
źródło
Ostrzeżenie. Użyłem setAllowsRubberBanding: w mojej aplikacji Apple go odrzuciło, stwierdzając, że niepubliczne funkcje API są niedozwolone (cytowanie: 3.3.1)
źródło
W Swift, aby wyłączyć odbicia
źródło
Metoda Brada działała dla mnie. Jeśli go użyjesz, możesz uczynić go trochę bezpieczniejszym.
Jeśli jabłko coś zmieni, wtedy odbicie wróci - ale przynajmniej twoja aplikacja się nie zawiesi.
źródło
Na iOS5 tylko wtedy, gdy planujesz pozwolić użytkownikom na powiększanie zawartości strony internetowej (np. Dwukrotne dotknięcie) ustawienie odrzuceń nie jest wystarczające. Musisz także ustawić właściwości alwaysBounceHorizontal i alwaysBounceVertical na NO, w przeciwnym razie, gdy pomniejszą (kolejne podwójne dotknięcie ...), domyślnie, odbije się ponownie.
źródło
Przejrzałem kolekcję widoków podrzędnych UIWebView i ustawiłem ich tła na [UIColor blackColor], ten sam kolor co tło strony. Widok nadal będzie się odbijał, ale nie pokaże brzydkiego ciemnoszarego tła.
źródło
Wygląda mi na to, że UIWebView ma UIScrollView. Możesz do tego użyć udokumentowanych interfejsów API, ale odbijanie jest ustawione dla obu kierunków, a nie indywidualnie. To jest w dokumentach API. UIScrollView ma właściwość bounce, więc coś takiego działa (nie wiem, czy jest więcej niż jeden widok przewijania):
źródło
Zirytowało mnie to, że UIWebView nie jest widokiem przewijania, więc utworzyłem niestandardową podklasę, aby uzyskać widok przewijania widoku strony internetowej. Ten suklass zawiera widok przewijania, dzięki czemu można dostosować zachowanie widoku internetowego. Punktami zwrotnymi tej klasy są:
}
Następnie, podczas tworzenia niestandardowego widoku internetowego, możesz wyłączyć odbijanie za pomocą:
Jest to świetny sposób ogólnego zastosowania do tworzenia widoku internetowego z możliwością dostosowywania zachowania przewijania. Jest tylko kilka rzeczy, na które należy uważać:
źródło
Natknąłem się na to, szukając odpowiedzi i ostatecznie po prostu miałem szczęście, że udało mi się znaleźć odpowiedź. Zrobiłem
i zadziałało.
źródło
To działało dla mnie i też pięknie (używam phonegap z webView)
lub
źródło
Wypróbowałem nieco inne podejście, aby zapobiec przewijaniu i odbijaniu obiektów UIWebView : dodając rozpoznawanie gestów, aby zastąpić inne gesty.
Wygląda na to, że UIWebView lub jego widok przewijania używa własnego rozpoznawania gestów panoramy do wykrywania przewijania użytkownika. Ale zgodnie z dokumentacją Apple istnieje uzasadniony sposób na zastąpienie jednego rozpoznawania gestów innym. Protokół UIGestureRecognizerDelegate ma metodę gestRecognizer: shouldRecognizeSimultentlyWithGestureRecognizer: - który pozwala kontrolować zachowanie dowolnych kolidujących gestów.
Więc to, co zrobiłem, było
w metodzie viewDidLoad kontrolera widoku:
następnie metoda przesłonięcia gestu:
Oczywiście ta metoda delegowania może być bardziej złożona w prawdziwej aplikacji - możemy selektywnie wyłączać inne moduły rozpoznające, analizując inny plik GestureRecognizer.view i podejmując decyzję na podstawie tego, jaki to widok.
I wreszcie, ze względu na kompletność, metodę, którą zarejestrowaliśmy jako program obsługi panoramowania:
może być pusty, jeśli wszystko, czego chcemy, to anulować przewijanie i podskakiwanie widoków internetowych, lub może zawierać nasz własny kod do implementacji takich ruchów panoramy i animacji, których naprawdę chcemy ...
Jak dotąd eksperymentuję z tymi wszystkimi rzeczami i wydaje się, że działają mniej więcej tak, jak tego chcę. Jednak nie próbowałem jeszcze przesyłać żadnych aplikacji do iStore. Ale wydaje mi się, że do tej pory nie korzystałem z niczego nieudokumentowanego ... Jeśli ktoś uzna to inaczej, proszę o informację.
źródło
Oto dwa nowsze potencjalne rozwiązania. Najwyraźniej możesz użyć jqtouch lub pastrykit, aby wyłączyć przewijanie. Jednak nie mam ich do pracy. Możesz być bardziej kompetentny.
wyłączenie przewijania w pionie
kopanie w pastrykit
źródło
naprawiono pozycjonowanie na mobilnym safari
Ten link bardzo mi pomógł ... To proste .. Jest demo ..
źródło
(Przykład Xcode 5 iOS 7 SDK) Oto przykład aplikacji Universal korzystającej z funkcji setBounces przewijania. Jest to projekt / przykład typu open source znajdujący się tutaj: Link do SimpleWebView (przykładowy kod pocztowy i przykład kodu źródłowego)
źródło
Jednym z podstron
UIWebView
powinien byćUIScrollView
. Ustaw jegoscrollEnabled
właściwość na,NO
a widok sieci będzie całkowicie wyłączony.Uwaga: technicznie korzysta z prywatnego interfejsu API, dlatego aplikacja może zostać odrzucona lub ulec awarii w przyszłych wersjach systemu operacyjnego. Użyj
@try
irespondsToSelector
źródło
Sprawdź
bounces
właściwośćUIScrollView
. Quoth the Apple docs:Upewnij się, że używasz właściwego
UIScrollView
. Nie jestem pewien, jak wygląda hierarchiaUIWebView
, ale widok przewijania może być rodzicem, a nie dzieckiemUIWebView
.źródło
Aby wyłączyć
UIWebView
przewijanie, możesz użyć następującego wiersza kodu:W tym przykładzie
ObjWebview
jest typuUIWebView
.źródło
webView.scrollView.scrollEnabled = NIE; webView.scrollView.bounces = NIE;
źródło