8
votes

UISCrollView + uiWebView = Pas de ScrollSTotop

Cela ressemble à un problème qui pourrait avoir une solution simple, mais je n'ai rien trouvé ce qui pourrait mener la voie à cela. J'utilise UiWebView Inside of UiscrollView et appuisant sur la barre d'état (pour faire défiler le contenu en haut) ne fonctionne pas.

J'ai fait une application de test simple pour voir s'il s'agit d'une défaillance de la réalité uiwebviews. Et c'est vraiment. P>

// doesn't scroll
UIScrollView *sv = [[UIScrollView alloc] init];
sv.frame = CGRectMake(0, 0, 320, 480);
sv.contentSize = CGSizeMake(320, 1200);

UIWebView *wv = [[UIWebView alloc] init];
wv.frame = CGRectMake(0, 0, 320, 100);
[sv addSubview:wv]; 

[self.view addSubview:sv];


0 commentaires

4 Réponses :


7
votes

J'ai couru dans cette hier soir jusqu'à ce que j'ai finalement trouvé la réponse enterrée dans un commentaire à un commentaire. L'idée de ce message original est que lorsque vous ajoutez l'UIWebView à votre UISCrollingView, vous utilisez les suivants:

- (void)webViewDidFinishLoad:(UIWebView *) wv {    
    [self ensureScrollsToTop: wv];
}


3 commentaires

Merci Nivekastoreth, cela me dérangeait. Je veux juste souligner que vous manquez d'un "(" dans Ensurcollsotoptoptoptotop et je tiens à rappeler à quiconque qui trouve cela pour définir le délégué de la vision WebView afin que WebViewDidfinishloadload soit appelé.


Cela fonctionne, mais vous vouliez probablement dire: (((Uiscrollview *) [[WebViews WebViews] ObjectAindex: 0]). ScrollSTotop = Oui;


Ma mémoire de ceci est un peu floue pour le moment, mais comme je me souviens, la question est que vous devez définir ScrollSToop sur Non, car le problème est si le problème de défilement de plusieurs vues renvoie Oui (comme ils présentent à travers les enfants). Cela désactive réellement que Fonctionnalité. C'est seulement: si une seule et une seule vue de défilement renvoie oui.



3
votes

dans iPhone OS, s'il existe plus d'une UISCrollView (ou de sa sous-classe, par exemple UitailView, UiWebView) dans la vue ViewController actuelle, le système ne sait pas quelle UiscrollView doit être défilé au sommet.

Fix rapide: Pour tous les Uiscrollviews que vous ne voulez pas prendre en charge ScrollSotop, il suffit de définir le ScrollSotop comme non, alors tout fonctionne parfaitement. P>

self.scrollView1.scrollsToTop = NO;
self.scrollView2.scrollsToTop = NO;
self.scrollView1.scrollsToTop = YES; // by default scrollsToTop is set as YES, this line is not necessary


0 commentaires

0
votes

Webviews par défaut aura Oui pour ScrollSTotop-Valeur. J'ai écrit une classe simple pour ce problème spécifique. Dans mon application, nous avons plusieurs webviews et Scrollsviews. Cela rend tout beaucoup plus facile.

https://gist.github.com/hfossli/6776203

Il définit essentiellement ScrollSToop sur NO sur tous les autres envies de défilement que celui que vous spécifiez.


0 commentaires

0
votes

Je veux ajouter mon cas, j'ajoute un UIWebView sur un UISCrollView, comme h4xxr code> dit :

S'il y a plus d'une vue de défilement, un message ScrollViefDidscrollTotoPltotop est ignoré P> BlockQuote>

Donc, je reçois un moyen simple de le faire fonctionner sur webview: il suffit de définir la propriété ScrollSotop de ScrollView · S Faux. p>

et lorsque vous appuyez sur la barre d'état, il n'a pas été intercepté par la vision de ScrollView et le webview fait défiler vers le haut! P>

    UIScrollView *scrollView = [[UIScrollView alloc] init];
    scrollView.frame = self.view.bounds;
    scrollView.scrollsToTop = false; //igore scrollView`s scrollsToTop
    [self.view addSubview:scrollView];

    UIWebView *webView = [[UIWebView alloc] init];
    webView.frame = scrollView.bounds;
    [scrollView addSubview:webView];


0 commentaires