Andere Tipps

Ich war an einem Projekt suchen, der es einfach, Web-Anwendungen als vollwertiges installierbare Anwendungen auf dem iPhone genannt Quick , und fand eine Lösung, die funktioniert, wenn Sie Ihren Bildschirm überhaupt scrollbaren nicht sein wollen, was in meinem Fall habe ich nicht.

In der oben genannten Projekt / Blog-Post, erwähnen sie eine Javascript-Funktion können Sie hinzufügen, um das Prellen auszuschalten, die diese im Wesentlichen darauf:

    document.ontouchmove = function(event){
        event.preventDefault();
    }

Wenn Sie mehr über sehen wollen, wie sie es implementieren, einfach Quick Connect herunterladen und es ausprobieren .... Aber im Grunde alle es tut, ist so nennen Javascript Laden der Seite ... versucht Putting ich es nur im Kopf mein Dokument, und es scheint gut zu funktionieren.

Nun alles, was ich tat dies zu tun ist:

UIView *firstView = [webView.subviews firstObject];

if ([firstView isKindOfClass:[UIScrollView class]]) {

    UIScrollView *scroll = (UIScrollView*)firstView;
   [scroll setScrollEnabled:NO];  //to stop scrolling completely
   [scroll setBounces:NO]; //to stop bouncing 

}

funktioniert gut für mich ... Auch ist die tickte Antwort auf diese Frage ein, dass Apple ablehnen, wenn Sie es verwenden, in Ihre iphone app.

In den iOS 5 SDK können Sie die Scroll-Ansicht mit einer Web-Ansicht zugeordnet Zugriff direkt anstatt Iterieren durch seine Subviews.

So deaktivieren im Scroll-Ansicht 'Prellen' Sie verwenden können:

myWebView.scrollView.bounces = NO;

Sehen Sie die UIWebView Klassenreferenz .

(Wenn Sie jedoch Versionen des SDK vor 5.0 unterstützen müssen, sollten Sie Mirek Rusin Rat folgen.)

Swift 3

webView.scrollView.bounces = false

Warnung. Früher habe ich setAllowsRubberBanding: in meiner App und Apple abgelehnt, die besagt, dass nicht-öffentliche API-Funktionen sind nicht erlaubt (zitieren: 3.3.1)

In Swift prallt deaktivieren

webViewObj.scrollView.bounces = false

Brad Methode für mich gearbeitet. Wenn Sie es verwenden, möchten Sie vielleicht es ein wenig sicherer machen.

id scrollView = [yourWebView.subviews objectAtIndex:0];
if( [scrollView respondsToSelector:@selector(setAllowsRubberBanding:)] )
{
    [scrollView performSelector:@selector(setAllowsRubberBanding:) withObject:NO];
}

Wenn Apple ändert sich etwas, dann die Bounce kommen wieder -. Aber zumindest Ihre Anwendung wird nicht abstürzen

Auf iOS5 nur, wenn Sie planen, die Benutzer zu lassen, vergrößern die Webansicht Inhalt (E.I. .: doppelt tippen) die Bounce-Einstellung ist nicht genug. Sie müssen auch alwaysBounceHorizontal und alwaysBounceVertical Eigenschaften auf NO setzen, sonst, wenn sie Zoom-out (ein weiteres doppeltes Tippen ...) es auf dem Standard wieder prallt.

ich durchlaufen die Sammlung von UIWebView des Subviews und setzen ihre Hintergründe auf [UIColor black], die gleiche Farbe wie die Webseite Hintergrund. Die Ansicht wird noch hüpfen, aber es wird nicht so hässlich dunkelgrauen Hintergrund zeigen.

Es scheint mir, wie die UIWebView eine UIScrollView hat. Sie können für diese dokumentierte APIs verwenden, aber Prellen für beide Richtungen eingestellt wird, nicht einzeln. Dies ist in der API-Dokumentation. UIScrollView hat eine Bounce-Eigenschaft, so etwas wie dies funktioniert (weiß nicht, ob es mehr als eine Scrollview ist):

NSArray *subviews = myWebView.subviews;
NSObject *obj = nil;
int i = 0;
for (; i < subviews.count ; i++)
{
    obj = [subviews objectAtIndex:i];

    if([[obj class] isSubclassOfClass:[UIScrollView class]] == YES)
    {
        ((UIScrollView*)obj).bounces = NO;
    }
}

Ich war verärgert, um herauszufinden, dass UIWebView keine Scroll-Ansicht ist, also machte ich eine benutzerdefinierte Unterklasse in der Web-Ansicht der Scroll-Ansicht zu erhalten. Diese suclass enthält eine Scroll-Ansicht, so dass Sie das Verhalten Ihrer Web-Ansicht anpassen können. Die Pointen dieser Klasse sind:

@class CustomWebView : UIWebview
...

- (id) initWithFrame:(CGRect)frame{
self = [super initWithFrame:frame];
// WebViews are subclass of NSObject and not UIScrollView and therefore don't allow customization.
// However, a UIWebView is a UIScrollViewDelegate, so it must CONTAIN a ScrollView somewhere.
// To use a web view like a scroll view, let's traverse the view hierarchy to find the scroll view inside the web view.
for (UIView* v in self.subviews){
    if ([v isKindOfClass:[UIScrollView class]]){
        _scrollView = (UIScrollView*)v; 
        break;
    }
}
return self;

}

Wenn Sie dann eine benutzerdefinierte Web-Ansicht erstellen, können Sie deaktivieren Prellen mit:

customWebView.scrollView.bounces = NO; //(or customWebView.scrollView.alwaysBounceVertically = NO)

Dies ist ein großer Allzweck-Weg, um eine Web-Ansicht mit anpassbaren Scroll-Verhalten zu machen. Es gibt nur ein paar Dinge zu achten:

  • wie bei jedem Blick, müssen Sie auch außer Kraft setzen - (id) initWithCoder: wenn Sie es im Interface Builder verwenden
  • , wenn Sie zunächst eine Web-Ansicht erstellen, ist sein Inhalt Größe immer das gleiche wie die Größe des Rahmens der Ansicht. Nachdem Sie das Web bewegen, stellt die Inhaltsgröße, die Größe des eigentlichen Web-Inhalts in der Ansicht. Um dies zu umgehen, habe ich etwas hacky - Aufruf -setContentOffset. CGPointMake (0,1) animiert: JA, um eine unmerkliche Veränderung zu erzwingen, um die richtige Größe des Inhalts der Web-Ansicht eingestellt werden

Kam nach einer Antwort auf diese Suche und ich schließlich hatten Glück nur auf eine Antwort meiner eigenen von zu verwirren. Ich habe

[[webview scrollView] setBounces:NO];

und es hat funktioniert.

Das funktionierte für mich, und schön zu (ich benutze phonegap mit webView)

[[webView.webView scrollView] setScrollEnabled:NO];

oder

[[webView scrollView] setScrollEnabled:NO];

habe ich versucht, einen etwas anderen Ansatz zu verhindern UIWebView Objekte aus Scrollen und Prellen: a. Gestenerkenner Hinzufügen andere Gesten außer Kraft zu setzen

Es scheint, UIWebView oder seine scroller subview verwendet Erkenner seine eigene pan Geste Benutzer Scrollen zu erfassen. Aber nach Apples Dokumentation gibt es eine legitime Art und Weise der überwiegenden eine Gestenerkenner mit einem anderen. UIGestureRecognizerDelegate Protokoll hat eine Methode GestureRecognizer: shouldRecognizeSimultaneouslyWithGestureRecognizer:. -, die das Verhalten einer kollidierenden Geste Erkenner steuern

Also, was ich tat, war

in den viewDidLoad Methode des View-Controller:

// Install a pan gesture recognizer                                                                                        // We ignore all the touches except the first and try to prevent other pan gestures                                                     
// by registering this object as the recognizer's delegate                                                                                        
UIPanGestureRecognizer *recognizer;                                                                                                               
recognizer = [[UIPanGestureRecognizer alloc] initWithTarget:self action:@selector(handlePanFrom:)];                                                   
recognizer.delegate = self;                                                                                                                       
recognizer.maximumNumberOfTouches = 1;                                                                                                            
[self.view addGestureRecognizer:recognizer];                                                                                                          
self.panGestureFixer = recognizer;                                                                                                                  
[recognizer release]; 

Dann wird die Geste überschreiben Methode:

// Control gestures precedence                                                                                                                            
- (BOOL)gestureRecognizer:(UIGestureRecognizer *)gestureRecognizer                                                                                        
        shouldRecognizeSimultaneouslyWithGestureRecognizer:(UIGestureRecognizer *)otherGestureRecognizer                                                  
{                                                                                                                                                         
        // Prevent all panning gestures (which do nothing but scroll webViews, something we want to disable in                                          
        // the most painless way)                                                                                                                         
        if ([otherGestureRecognizer isKindOfClass:[UIPanGestureRecognizer class]])                                                                        
        {
            // Just disable every other pan gesture recognizer right away                                                                             
            otherGestureRecognizer.enabled = FALSE;
        }                                                                                                                                                  
        return NO;                                                                                                                                        
}              

Natürlich ist diese Delegatmethode kann mir komplexer in einer realen Anwendung - können wir andere Erkenner selektiv deaktivieren, Analyse otherGestureRecognizer.view und machen Entscheidung basiert auf, was es sehen ist.

Und schließlich aus Gründen der Vollständigkeit, die Methode, die wir als pan-Handler registriert:

- (void)handlePanFrom:(UIPanGestureRecognizer *)recognizer 
{ 
    // do nothing as of yet
}

kann leer sein, wenn alles, was wir wollen Scrollen Webansichten abzubrechen und prallt, oder es kann unseren eigenen Code enthalten, die Art von Pan Bewegungen und Animationen implementieren wir wirklich wollen ...

Bisher bin ich nur das Experimentieren mit all diesem Zeug, und es scheint mehr oder weniger zu arbeiten, wie ich es will. Ich habe noch keine Apps iStore einreichen versucht, though. Aber ich glaube, ich habe nichts bisher nicht dokumentiert verwendet ... Wenn jemand es sonst findet, bitte mich informieren.

Hier sind zwei neuere mögliche Lösungen. Offenbar können Sie jQTouch oder pastrykit verwenden Scrollen zu deaktivieren. Allerdings habe ich bekam diese nicht zu arbeiten. Sie könnten mehr zuständig sein.

vertikales Scrollen Ausschalten

Graben in pastrykit

feste Positionierung auf mobile Safari

Dieser Link hat mir geholfen, viel ..... Es ist einfach .. Es gibt eine Demo ..

(Xcode 5 iOS 7 SDK Beispiel) Hier ist ein Universal-App Beispiel der Scroll setBounces Funktion. Es ist ein Open-Source-Projekt / Beispiel hier zu finden: Link zu SimpleWebView (Projekt Zip und Source Code Beispiel)

Einer der Subviews von UIWebView sollte ein UIScrollView sein. Legen Sie seine scrollEnabled Eigenschaft auf NO und die Web-Ansicht wird vollständig deaktiviert haben Scrollen.

Hinweis: Dies ist technisch eine private API und damit Ihre Anwendung könnte in Zukunft OS Versionen abgelehnt oder abstürzen werden. Verwenden @try und respondsToSelector

Schauen Sie in die bounces Eigenschaft UIScrollView. Da sagte der Apple-docs:

  

Wenn der Wert der Immobilie ist YES (Standardeinstellung), die Scroll-Ansicht prallt, wenn es eine Grenze des Inhalts trifft. Prellen zeigt visuell dass Scrollen eine Kante des Inhalts erreicht hat. Wenn der Wert NO ist, Scrollen sofort an dem Inhalt Grenze stoppt ohne Prellen.

Stellen Sie sicher, dass Sie den richtigen UIScrollView verwenden. Ich bin mir nicht sicher, was die Hierarchie wie für eine UIWebView aussieht, aber die Scroll-Ansicht könnte ein Elternteil sein, kein Kind, der UIWebView.

So deaktivieren Sie UIWebView Scrollen Sie die folgende Codezeile verwenden:

[ObjWebview setUserInteractionEnabled:FALSE];

In diesem Beispiel ObjWebview ist vom Typ UIWebView.

webView.scrollView.scrollEnabled = NO; webView.scrollView.bounces = NO;

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top