Weiß jemand, wie man verhindert, dass ein UIWebView vertikal springt? Ich meine, wenn ein Benutzer seinen iPhone-Bildschirm berührt, seinen Finger nach unten zieht und die Webansicht eine leere Stelle über der von mir geladenen Webseite anzeigt?
Ich habe mir die folgenden möglichen Lösungen angesehen, aber keine davon hat für mich funktioniert:
http://forums.macrumors.com/showthread.php?t=619534
Wie kann ich verhindern, dass eine UIScrollView horizontal abprallt?
ios
objective-c
iphone
uiscrollview
uiwebview
Brad Parks
quelle
quelle
Antworten:
... scheint gut zu funktionieren.
Es wird auch in den App Store aufgenommen.
Update : In iOS 5.x + gibt es einen einfacheren Weg -
UIWebView
hat einescrollView
Eigenschaft, sodass Ihr Code folgendermaßen aussehen kann:Gleiches gilt für
WKWebView
.quelle
UIWebView
damit ich[webView setBounces:NO]
überall anrufen kann, wo ich möchte.Ich habe mir ein Projekt angesehen, das es einfach macht, Webanwendungen als vollwertige installierbare Anwendungen auf dem iPhone namens QuickConnect zu erstellen , und eine Lösung gefunden, die funktioniert, wenn Sie nicht möchten, dass Ihr Bildschirm überhaupt scrollbar ist, was in meinem Fall der Fall ist Ich habe nicht.
In dem oben erwähnten Projekt- / Blog-Beitrag wird eine Javascript-Funktion erwähnt, die Sie hinzufügen können, um das Bouncing auszuschalten, was im Wesentlichen auf Folgendes hinausläuft:
Wenn Sie mehr darüber erfahren möchten, wie sie es implementieren, laden Sie einfach QuickConnect herunter und probieren Sie es aus. Aber im Grunde ist es nur das Aufrufen von Javascript beim Laden der Seite ... Ich habe versucht, es einfach in den Kopf meines Dokuments zu setzen. und es scheint gut zu funktionieren.
quelle
Nun, alles, was ich getan habe, um dies zu erreichen, ist:
Funktioniert gut für mich ... Außerdem ist die angekreuzte Antwort auf diese Frage eine, die Apple ablehnt, wenn Sie sie in Ihrer iPhone-App verwenden.
quelle
UIScrollView
erste Unteransicht ist, die derzeitUIWebView
möglicherweise der Fall ist. Dies kann sich jedoch in zukünftigen (sogar geringfügigen) Updates für iOS oder bestimmte Konfigurationen leicht ändern. Sie sollten wirklich einefor
Iteration durchführen, umsubviews
das tatsächlich zu findenUIScrollView
(es ist wirklich nicht so viel Arbeit und zumindest werden Sie garantiert ein bekommenUIScrollView
und Ihr Programm nicht zum Absturz bringen ...Im iOS 5 SDK können Sie direkt auf die einer Webansicht zugeordnete Bildlaufansicht zugreifen, anstatt die Unteransichten zu durchlaufen.
Um das "Bouncing" in der Bildlaufansicht zu deaktivieren, können Sie Folgendes verwenden:
Siehe die UIWebView-Klassenreferenz .
(Wenn Sie jedoch Versionen des SDK vor 5.0 unterstützen müssen, sollten Sie den Ratschlägen von Mirek Rusin folgen .)
quelle
Swift 3
quelle
Warnung. Ich habe setAllowsRubberBanding: in meiner App verwendet, und Apple lehnte dies ab und erklärte, dass nicht öffentliche API-Funktionen nicht zulässig sind (Zitat: 3.3.1).
quelle
In Swift, um Bounces zu deaktivieren
quelle
Brads Methode hat bei mir funktioniert. Wenn Sie es verwenden, möchten Sie es vielleicht etwas sicherer machen.
Wenn Apple etwas ändert, kommt der Sprung zurück - aber zumindest stürzt Ihre App nicht ab.
quelle
Unter iOS5 reicht die Bounce-Einstellung nicht aus, wenn Sie vorhaben, die Benutzer den Inhalt der Webansicht zoomen zu lassen (z. B. doppeltes Tippen). Sie müssen auch die Eigenschaften alwaysBounceHorizontal und alwaysBounceVertical auf NO setzen, da sie sonst beim Herauszoomen (ein weiteres doppeltes Tippen ...) auf die Standardeinstellungen wieder zurückspringen.
quelle
Ich habe die Sammlung der UIWebView-Unteransichten durchsucht und deren Hintergrund auf [UIColor blackColor] gesetzt, dieselbe Farbe wie der Hintergrund der Webseite. Die Ansicht wird weiterhin angezeigt, zeigt jedoch nicht den hässlichen dunkelgrauen Hintergrund.
quelle
Es sieht für mich so aus, als hätte die UIWebView eine UIScrollView. Sie können hierfür dokumentierte APIs verwenden, aber das Bouncing wird für beide Richtungen und nicht einzeln festgelegt. Dies ist in den API-Dokumenten. UIScrollView verfügt über eine Bounce-Eigenschaft, sodass so etwas funktioniert (ich weiß nicht, ob es mehr als eine Bildlaufansicht gibt):
quelle
Ich war verärgert, als ich herausfand, dass UIWebView keine Bildlaufansicht ist, und habe daher eine benutzerdefinierte Unterklasse erstellt, um die Bildlaufansicht der Webansicht aufzurufen. Diese Klasse enthält eine Bildlaufansicht, mit der Sie das Verhalten Ihrer Webansicht anpassen können. Die Pointen dieser Klasse sind:
}}
Wenn Sie dann eine benutzerdefinierte Webansicht erstellen, können Sie das Bouncen deaktivieren mit:
Dies ist eine großartige allgemeine Möglichkeit, eine Webansicht mit anpassbarem Bildlaufverhalten zu erstellen. Es gibt nur ein paar Dinge, auf die Sie achten müssen:
quelle
Kam über diese Suche nach einer Antwort und ich hatte schließlich nur Glück mit einer eigenen Antwort, indem ich herumgespielt habe. Ich tat
und es hat funktioniert.
quelle
Das hat bei mir funktioniert und auch wunderbar (ich verwende Phonegap mit webView)
oder
quelle
Ich habe einen etwas anderen Ansatz versucht, um zu verhindern, dass UIWebView- Objekte scrollen und springen können: Hinzufügen eines Gestenerkenners, um andere Gesten zu überschreiben.
Es scheint, dass UIWebView oder seine Scroller-Unteransicht einen eigenen Pan-Gesten-Erkenner verwendet, um das Scrollen von Benutzern zu erkennen. Laut Apples Dokumentation gibt es jedoch eine legitime Möglichkeit, einen Gestenerkenner mit einem anderen zu überschreiben. Das UIGestureRecognizerDelegate- Protokoll verfügt über eine Methode gestureRecognizer: shouldRecognizeSimultaneousWithGestureRecognizer: - Mit dieser Methode kann das Verhalten kollidierender Gestenerkenner gesteuert werden.
Also, was ich getan habe war
in der viewDidLoad-Methode des View Controllers:
dann die Gestenüberschreibungsmethode:
Natürlich kann diese Delegatmethode in einer realen Anwendung komplexer sein - wir können andere Erkenner selektiv deaktivieren, otherGestureRecognizer.view analysieren und Entscheidungen basierend auf der Ansicht treffen.
Und schließlich der Vollständigkeit halber die Methode, die wir als Pan-Handler registriert haben:
Es kann leer sein, wenn wir nur das Scrollen und Bouncen von Webansichten abbrechen möchten, oder es kann unseren eigenen Code enthalten, um die Art von Schwenkbewegungen und Animationen zu implementieren, die wir wirklich wollen ...
Bisher experimentiere ich nur mit all dem Zeug und es scheint mehr oder weniger so zu funktionieren, wie ich es will. Ich habe jedoch noch nicht versucht, Apps an iStore zu senden. Aber ich glaube, ich habe bisher nichts undokumentiertes verwendet ... Wenn jemand etwas anderes findet, informieren Sie mich bitte.
quelle
Hier sind zwei neuere mögliche Lösungen. Anscheinend können Sie jqtouch oder pastrykit verwenden, um das Scrollen zu deaktivieren. Ich habe diese jedoch nicht zum Arbeiten. Sie könnten kompetenter sein.
vertikales Scrollen ausschalten
in Pastrykit graben
quelle
feste Positionierung auf mobiler Safari
Dieser Link hat mir sehr geholfen ..... Es ist einfach .. Es gibt eine Demo ..
quelle
(Xcode 5 iOS 7 SDK-Beispiel) Hier ist ein Universal App-Beispiel mit der Funktion setBounces in der Bildlaufansicht. Es handelt sich um ein Open Source-Projekt / Beispiel, das sich hier befindet: Link zu SimpleWebView (Beispiel für Projekt-Zip und Quellcode)
quelle
Eine der Unteransichten von
UIWebView
sollte a seinUIScrollView
. Wenn Sie diescrollEnabled
Eigenschaft aufNO
festlegen, wird das Scrollen in der Webansicht vollständig deaktiviert.Hinweis: Hierbei wird technisch eine private API verwendet. Daher kann Ihre App in zukünftigen Betriebssystemversionen abgelehnt werden oder abstürzen. Verwenden Sie
@try
undrespondsToSelector
quelle
Schauen Sie in das
bounces
Eigentum vonUIScrollView
. Quoth die Apple-Dokumente:Stellen Sie sicher, dass Sie das richtige verwenden
UIScrollView
. Ich bin nicht sicher, wie die Hierarchie für a aussiehtUIWebView
, aber die Bildlaufansicht könnte ein Elternteil und kein Kind der seinUIWebView
.quelle
Um das
UIWebView
Scrollen zu deaktivieren, können Sie die folgende Codezeile verwenden:In diesem Beispiel
ObjWebview
ist vom TypUIWebView
.quelle
webView.scrollView.scrollEnabled = NO; webView.scrollView.bounces = NO;
quelle