Ne pouvez pas obtenir scrollsToTop de travail sur iOS7

Je cible iOS7 dans ma dernière application, et taper sur la barre d'état ne semble pas faire défiler un tableView ou collectionView vers le haut.

j'ai mis self.tableView.scrollsToTop = true et pourtant rien ne se passe.

Je sais Qu'Apple a changé de façon significative la barre de statut dans iOS7, mais est-ce que ces changements ont cassé le scrollsToTop fonctionnalité?

mise à Jour

en réponse à un commentaire dans l'une des réponses, j'ai fait des tests pour m'assurer que ma vue de la collection était la seule scrollView sur l'écran, et c'était:

(lldb) po [self.view recursiveDescription]
<UIView: 0x1092ddf0; frame = (0 0; 320 568); autoresize = W+H; layer = <CALayer: 0x109357e0>>
   | <UICollectionView: 0x11351800; frame = (0 0; 320 568); clipsToBounds = YES; opaque = NO; autoresize = W+H; gestureRecognizers = <NSArray: 0x10966080>; layer = <CALayer: 0x109623a0>; contentOffset: {0, -64}> collection view layout: <UICollectionViewFlowLayout: 0x10940a70>
   |    | <UIImageView: 0x10965fa0; frame = (0 564.5; 320 3.5); alpha = 0; opaque = NO; autoresize = TM; userInteractionEnabled = NO; layer = <CALayer: 0x10965ee0>> - (null)
   |    | <UIImageView: 0x10948f60; frame = (316.5 561; 3.5 7); alpha = 0; opaque = NO; autoresize = LM; userInteractionEnabled = NO; layer = <CALayer: 0x10966030>> - (null)

mise à Jour #2

Je ne sais pas si c'est important, mais j'utilise un NavigationController iOS7 standard où la barre de navigation est transparente et applique un flou à ma collection/tableaux pendant qu'ils défilent en dessous.

mise à jour #3

Compris. S'avère que j' avoir plus d'un scrollView sur l'écran. Mon application a un menu de tiroir à gauche sous la partie principale de l'application, et ce menu a une vue de table pour les options. J'ai simplement mis self.menuTable.scrollsToTop = false et tout a fonctionné comme prévu dans le reste de l'application. Je n'ai pas eu à mettre en œuvre les méthodes de délégation scrollView ou quoi que ce soit.

24
demandé sur djibouti33 2013-09-27 23:54:37
la source

6 ответов

avez-vous plus d'une vue par défilement/vue de la table/vue de la collection à l'écran? Si si, un seul d'entre eux peut avoir scrollsToTopYES, sinon iOS7 ne faites défiler l'un d'eux vers le haut.

vous pouvez également implémenter la méthode UIScrollViewDelegate scrollViewShouldScrollToTop: et retour OUI si le passé dans de défilement de la vue est égal à celui que vous voulez pour faire défiler vers le haut:

- (BOOL) scrollViewShouldScrollToTop:(UIScrollView*) scrollView {
    if (scrollView == self.myTableView) {
        return YES;
    } else {
        return NO;
    }
}
23
répondu Greg 2013-09-28 01:09:01
la source

la réponse courte est qu'il n'y a rien de différent dans iOS7. Tant qu'il n'y a pas plus d'un UIScrollView chargé, votre tableView ou collectionView défilera vers le haut lorsque l'utilisateur Tapera la barre d'état. La touche ici est chargée; un autre scrollView ne doit pas nécessairement être à l'écran pour entrer en conflit avec un autre scrollView qui l'est.

Les tiroirs coulissants à gauche / droite sont très populaires de nos jours, et c'est la raison de mon problème. J'ai un menu contenant mon les options de navigation, et celles-ci sont toutes détenues par une vue Uitable. J'ai dû faire en sorte que j'ai mis menuTable.scrollsToTop = false avant que je puisse faire fonctionner les choses dans les autres parties de mon application.

11
répondu djibouti33 2013-10-01 08:32:11
la source

mon problème était que j'avais un UITextViewscrollsToTop

pour les autres :

rappelez-vous que la vue scroll que vous recherchez peut aussi être UIWebView..pas seulement la vue Utilisable. Une autre chose importante est qu'il ne s'agit pas seulement de scrollViews visibles, mais aussi de scrollviews chargées.

si vous ne trouvez pas le scrollView, vous pouvez toujours insérez la table de test UITableView, immédiatement lorsque l'application démarre, vérifiez si elle fait défiler vers le haut, et puis chargez de plus en plus de vues, jusqu'à ce que la table d'essai cesse de défiler vers le haut.

4
répondu user1105951 2014-01-30 23:23:58
la source

si vos cellules de table sont dynamiques, supprimez ce qui suit:

- (BOOL)scrollViewShouldScrollToTop:(UIScrollView *)scrollView
{
    return YES;
}

Créer une nouvelle fonction comme suit:

- (void) disableScrollsToTopPropertyOnAllSubviewsOf:(UIView *)view {
    for (UIView *subview in view.subviews) {
        if ([subview isKindOfClass:[UIScrollView class]]) {
            ((UIScrollView *)subview).scrollsToTop = NO;
        }
        [self disableScrollsToTopPropertyOnAllSubviewsOf:subview];
    }
}

Appel de la fonction ci-dessus dans - (void)viewDidLoad

[self disableScrollsToTopPropertyOnAllSubviewsOf:self.view];

maintenant, activez ScrollsToTop pour votre vue de table comme suit:

[myTableView setScrollsToTop:YES];
4
répondu AshMan 2017-08-01 06:13:00
la source

ca marche toujours pour moi:

[self.tableView scrollRectToVisible:CGRectMake(0, 0, 1, 1) animated:YES];
-2
répondu Pauls 2014-11-20 00:17:15
la source