2009-03-31 7 views
8

Je suis confronté à un cas où j'ai de la documentation HTML dans l'application qui utilise un arrière-plan sombre, mais l'indicateur de défilement par défaut pour UIWebView se perd dans cet arrière-plan. Voici un exemple:Pouvez-vous indiquer à UIWebView d'utiliser un indicateur blanc?

Image of UIWebView dark scroller http://www.sunsetlakesoftware.com/sites/default/files/so-webview.jpg

Avec UIScrollView qui UIWebView ressemble à son comportement, vous pouvez définir la propriété indicatorStyle à UIScrollViewIndicatorStyleWhite, qui se traduit par le comportement souhaité:

alt text http://www.sunsetlakesoftware.com/sites/default/files/so-scrollview.jpg

Je n'arrive pas à trouver une propriété similaire dans l'interface exposée pour UIWebView. Y a-t-il un truc CSS ou un autre moyen de forcer l'indicateur de défilement à un style plus léger?

Répondre

13

A partir iOS 5.0, on peut maintenant personnaliser le comportement de défilement de l'affichage Web en accédant à la propriété « scrollview » pour obtenir la fonctionnalité souhaitée:

webView.scrollView.indicatorStyle = UIScrollViewIndicatorStyleWhite; 
1

Parcourez les sous-vues et testez un UIScrollView. Vous pouvez ensuite programmer l'indicateur.

+2

Malheureusement, UIWebView utilise un UIScroller pour gérer son défilement interne (vu en traversant la hiérarchie de vue interne). Ceci est une classe définie en privé, donc c'est une très mauvaise idée de le toucher. –

1

Il n'existe aucune API publique pour cela dans le SDK 2.x. Déposer un bug/cas/radar le demandant en 3.0.

+0

J'avais peur autant, mais j'avais espéré que quelqu'un avait un truc que j'avais raté. Je vais déposer une demande d'amélioration de fonctionnalité. –

6

Si vous souhaitez analyser les sous-vues et tenter d'échouer avec élégance si quelque chose change à l'avenir cela fonctionne actuellement:

//set a white scroll bar 
    for (UIView *subview in [webView subviews]) { 
     if ([subview isKindOfClass:NSClassFromString(@"UIScroller")] || [subview isKindOfClass:NSClassFromString(@"UIScrollView")]) { 
      if ([subview respondsToSelector:@selector(setIndicatorStyle:)]) { 
       [(UIScrollView *)subview setIndicatorStyle:UIScrollViewIndicatorStyleWhite]; 
      } 
      break; 
     } 
    } 

Bien que les choses pourraient encore briser à l'avenir si setIndicatorStyle: changements à attendre une valeur non-énumérée ... mais je doute que cela arriverait.