56 votes

UIScrollView - montrant la barre de défilement

Peut-être un simple!

Est-ce que quelqu'un sait comment afficher en permanence la barre de défilement d'un UIScrollView?

Il s’affiche lorsque l’utilisateur défile pour qu’il puisse voir la position de la vue de défilement dans laquelle il se trouve.

MAIS je voudrais le montrer constamment parce qu'il n'est pas immédiatement évident pour l'utilisateur que le défilement est disponible

Tout conseil serait hautement apprécié.

83voto

Mongus Pong Points 6902

Non, vous ne pouvez pas toujours les afficher, mais vous pouvez les faire clignoter temporairement.

 [myScrollView flashScrollIndicators];
 

Ce sont des indicateurs de défilement, pas des barres de défilement. Vous ne pouvez pas les utiliser pour faire défiler.

6voto

SAKrisT Points 2229

ma solution pour afficher les indicateurs de défilement tout le temps

 #define noDisableVerticalScrollTag 836913
#define noDisableHorizontalScrollTag 836914

@implementation UIImageView (ForScrollView)

- (void) setAlpha:(float)alpha {

if (self.superview.tag == noDisableVerticalScrollTag) {
    if (alpha == 0 && self.autoresizingMask == UIViewAutoresizingFlexibleLeftMargin) {
        if (self.frame.size.width < 10 && self.frame.size.height > self.frame.size.width) {
            UIScrollView *sc = (UIScrollView*)self.superview;
            if (sc.frame.size.height < sc.contentSize.height) {
                return;
            }
        }
    }
}

if (self.superview.tag == noDisableHorizontalScrollTag) {
    if (alpha == 0 && self.autoresizingMask == UIViewAutoresizingFlexibleTopMargin) {
        if (self.frame.size.height < 10 && self.frame.size.height < self.frame.size.width) {
            UIScrollView *sc = (UIScrollView*)self.superview;
            if (sc.frame.size.width < sc.contentSize.width) {
                return;
            }
        }
    }
}

[super setAlpha:alpha];
}
@end
 

UPDATE : Cette solution provoque des problèmes sur 64 bits. Pour plus de détails, regardez ici

4voto

Benoit Points 39210

Autant que je sache, ce n'est pas possible. Le seul appel de l'API qui contrôle l'affichage de l'indicateur de défilement est - showsVerticalScrollIndicator et qui ne peuvent désactiver l'affichage de l'indicateur tout à fait.

Vous pourriez flashScrollIndicators lorsque la vue s'affiche afin que l'utilisateur sait où dans le défilement de la vue qu'ils sont.

3voto

sciasxp Points 479

Celui-ci a fonctionné pour moi:

 #define noDisableVerticalScrollTag 836913
#define noDisableHorizontalScrollTag 836914

@implementation UIImageView (ForScrollView) 

- (void) setAlpha:(float)alpha {

    if (self.superview.tag == noDisableVerticalScrollTag) {
        if (alpha == 0 && self.autoresizingMask == UIViewAutoresizingFlexibleLeftMargin) {
            if (self.frame.size.width < 10 && self.frame.size.height > self.frame.size.width) {
                UIScrollView *sc = (UIScrollView*)self.superview;
                if (sc.frame.size.height < sc.contentSize.height) {
                    return;
                }
            }
        }
    }

    if (self.superview.tag == noDisableHorizontalScrollTag) {
        if (alpha == 0 && self.autoresizingMask == UIViewAutoresizingFlexibleTopMargin) {
            if (self.frame.size.height < 10 && self.frame.size.height < self.frame.size.width) {
                UIScrollView *sc = (UIScrollView*)self.superview;
                if (sc.frame.size.width < sc.contentSize.width) {
                    return;
                }
            }
        }
    }

    [super setAlpha:alpha];
}
@end
 

J'ai eu cet extrait à partir d'ici: http://www.developers-life.com/scrollview-with-scrolls-indicators-which-are-shown-all-the-time.html

0voto

PapaSmurf Points 1023

Pour webviews, où le premier sous-vue est un scrollview, dans le dernier SDK, si une page HTML est plus long que le cadre, pas de barre de défilement s'affiche, et si le contenu html se passe à la ligne avec le cadre, ou vous avez un espace au bas de l'image, 'regarde' comme il n'y a pas de scroll nécessaire, et rien au-dessous de la ligne. Dans ce cas, je pense que vous devriez certainement flash les barres de défilement dans la délégué

- (void)webViewDidFinishLoad:(UIWebView *)webView; 

méthode pour avertir l'utilisateur qu'il y a plus de choses "hors de la boîte".

NSArray *subViews = [[NSArray alloc] initWithArray:[webView subviews]] ;
UIScrollView *webScroller = (UIScrollView *)[subViews objectAtIndex:0] ;    

Avec le HTML, à l'horizontale contenu est enroulé automatiquement, afin de vérifier la webscroller hauteur.

        if (webScroller.contentSize.height > webView.frame.size.height) {
            [webScroller flashScrollIndicators];
        }

Le flash est si courte, et il arrive alors que plus de vues sont en cours de chargement, qu'il peut être négligé. Pour contourner ça, on peut aussi se trémousser ou de rebond ou de défilement ou mettre à l'échelle le contenu un peu via le générique UIView commitAnimations

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X