2010-06-27 8 views
10

Ich weiß nicht, ob dies überhaupt möglich ist, oder was Google zu finden, aber wie Sie hinzufügen können:iPhone HTML5 App Scrolling Frage

<meta name="viewport" content="user-scalable=no, width=device-width, initial-scale=1.0, maximum-scale=1.0"/> 

Und es macht es so können Sie nicht blättern Seite an Seite, nur auf und ab. Gibt es einen Weg, es so zu machen, dass es den Overscroll-Effekt nicht macht, wenn du das Ende erreichst, sondern weiter scrollst und es dann zurückspringt? Wie Cocoa Apps habe ich festgestellt, dass "Overscroll" manchmal die gleiche Hintergrundfarbe haben, so dass es nicht wie Safari aussieht oder es einfach nicht tut?

Antwort

14

Was Sie Overscroll nennen, heißt Bounce. Leider gibt es keine dokumentierte Möglichkeit, den Bounce in einem UIWebView zu deaktivieren. Sie können sich UIScrollView für Bounce-bezogene Methoden ansehen. Ein UIWebView besitzt ein UIScrollView, stellt es jedoch nicht zur Verfügung.

Um horizontales Scrollen zu verhindern, müssen Sie nur sicherstellen, dass Ihre Webseite in das Ansichtsfenster passt. Eine häufige Ursache für das Nichtpassen ist ein 100% -Breite-Item, wenn der Body-Rand nicht Null ist.

Sie können das Scrollen und Bouncen vollständig verhindern, indem Sie dem Dokument Touch-Ereignishandler hinzufügen und preventDefault für das Ereignis aufrufen. Dadurch wird der Bounce effektiv deaktiviert, wenn Ihre Webseite vollständig in das Ansichtsfenster passt.

function stopScrolling(touchEvent) { touchEvent.preventDefault(); } 
document.addEventListener('touchstart' , stopScrolling , false); 
document.addEventListener('touchmove' , stopScrolling , false); 

Edit:

UIWebView ist meist privat von der Objective-C-Seite, aber ziemlich zugänglich von der Javascript-Seite. Sie können inject javascript, wenn Sie den Inhalt nicht steuern, der geladen wird.

+0

Mist, danke! Wissen Sie, wie Sie (ohne JS) eine feste Position machen können? –

+0

@drainonward. Dies funktionierte großartig für mich, außer dass es alle meine Auswahlmenüs deaktiviert hat. Gibt es eine Möglichkeit, das zu umgehen? – JSW189

5

Wenn Sie Cordova verwenden 1.7+, öffnen Sie einfach die Cordova.plist Datei und der Schlüssel UIWebViewBounce-NO

In Cordova 2.3+ gesetzt, das jetzt config.xml ist, und Sie müssen es false einstellen .

2

@ JSW189

wenn Sie diese Zeile löschen:

document.addEventListener('touchstart' , stopScrolling , false); 

Dann sollte es funktionieren, denke ich. Ich hatte das Problem, dass ich die Knöpfe nicht mehr drücken konnte, ich versuche, diese Zeile oben zu löschen und es lief nicht mehr und ich konnte Knöpfe drücken.

+0

Das hat auch für mich funktioniert – Mike