8
votes

OS iPhone: Tap Barre d'état pour faire défiler jusqu'à TOP ne fonctionne pas après la suppression / addition

Utilisation de cette méthode pour masquer la barre d'état:

[[UIApplication sharedApplication] setStatusBarHidden:YES animated:YES];


0 commentaires

9 Réponses :


18
votes

Vous pouvez essayer de définir la propriété ScrollSTotop vers true après la ré-affiche:

[currentView setScrollsToTop:YES];


5 commentaires

Très bonne observation. Cela devient probablement confondu avec plusieurs vues. Avoir à voir si je peux trouver une solution de contournement.


Le problème est que c'est un UIWebView qui doit obtenir le comportement de défilement à haut retour - et ce n'est pas une sous-classe UiscrollView directe ... Ainsi que SetScrollSotop: ne fonctionne pas du tout. Il a probablement une vision de défilement quelque part dans sa structure internationale UiWebViewInternal, mais qui semble être très opaque. [WebView ValueForKey: @ "_ ScrollView"] n'a pas fonctionné du tout pour en obtenir la prise directe. Tout autre nom suppose? :)


Vous pouvez ajouter l'UIWebView comme sous-vue d'un UISCrollView (dans ma mise en œuvre, il s'agit d'une sous-assisterie d'un utableview). S'il s'agit de la seule vue à l'intérieur de cet UISCrollView, appelez -setscrollsotop sur l'UiscrollView devrait le faire fonctionner sur l'UIWebView ...


Votre nom est vraiment h4x0r, n'est-ce pas :)


+1 pour ceux qui utilisent un UiscrollView associé à un uipageviewController comme moi. Vous devez le supprimer de SuperView dans ViewDidDisappered et l'ajouter à nouveau dans la viewwillappear.



0
votes

Je viens de courir sur un comportement similaire dans l'application que je travaille actuellement. Dans son cas, si vous chargez une vidéo YouTube à partir d'une UIWebView, faites défiler jusqu'au sommet des arrêts de travail pour le reste du cycle de vie de l'application. Je suppose un peu que cela pourrait arriver après avoir chargé le joueur de cinéma aussi, mais n'a pas confirmé. Cette fonctionnalité existe beaucoup plus longtemps et a probablement moins de bugs.


0 commentaires

5
votes

Vous pouvez utiliser le code suivant pour avoir le uiwebview Ignorer ScrollToTotop sans le UISCrollView : xxx < / p>


2 commentaires

Comme cela utilise un appel d'API privé, cela entraînera probablement rejeté votre demande. Vous pourrez peut-être vous échapper avec ((Uiscrollview *) [[Sous-système WebViews] ObjectAindex: 0]). ScrollSTotop = Non;


Merci Alex! Beaucoup plus élégant et sûr à coup sûr.



3
votes

J'ai eu un problème similaire après avoir joué une vidéo YouTube au sein de mon application. ScrollSotop code> était toujours défini sur Oui CODE> mais Taping La barre d'état n'avait aucun effet.

J'ai enfin compris que ma fenêtre d'application n'était plus la fenêtre de la clé. Après avoir ajouté la ligne suivante à une sous-classe UIWindow (que j'ai déjà eu pour d'autres raisons) tout a fonctionné comme il se doit à nouveau: P>

if (![self isKeyWindow]) [self makeKeyWindow];


0 commentaires

5
votes

J'avais un problème similaire où la fonctionnalité de défilement à haut a été perdue. Il s'avère que cela ne fonctionnera que lorsque vous n'avez qu'une vue active à la fois (dans la même vue de défilement). Dans mon cas, j'avais une vue de table et une autre vue qui s'effacerait. Ajout d'un SupprimerfromsuperView Code> à la fin de l'animation a fait l'affaire.

La réponse était dans le uiscrollview.h code> Fichier Commentaires: P>

/*
 this is for the scroll to top gesture. by default, a single scroll visible scroll view with this flag set will get the call. if there is more than one visible with this
 flag set or the delegeat method returns NO, the view isn't scrolled 
 */
@property(nonatomic) BOOL  scrollsToTop;          // default is YES. if set, special gesture will scroll to top of view after consulting delegate


0 commentaires

7
votes

La solution suivante par Alex a travaillé pour moi. Merci! XXX

Être pressé Ce correctif a fonctionné très bien, cependant donné plus de temps, j'ai peut-être sous-classé l'UIWebView et accéda directement au membre UISCrollView directement.

L'inquiétude que j'ai avec la méthode Alex 'est qu'il suppose que UiscrollView est à l'index zéro des sous-espaces (encapsulation permet aux membres privés de changer). Qui suggère une autre solution encore: xxx


0 commentaires

10
votes

Dans iOS 5.0 Vous pouvez accéder à la propriété ScrollView de ScrollView de l'UIWebView

webView.scrollView.scrollsToTop = YES;


0 commentaires

0
votes

Lorsqu'il y a plusieurs ScrollView, vous pouvez également définir ScrolleutOP to NON pour les autres ScrollView. cf:

Setscrollsotop avec plusieurs classes et / ou sous-classes UiscrollView (UitailView) < / a>


0 commentaires

0
votes

Je veux ajouter mon cas, j'ajoute un uiWebView sur un UISCrollView, comme H4XXR code> avait répondu au sommet:

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