[Tips] UINavigationCtrl + UIScrollView + statusBar transparente = inset

LeChatNoirLeChatNoir Membre, Modérateur
décembre 2014 modifié dans API UIKit #1

Hello,


 


Je livre ici une bien étrange solution a un bien vicieux problème. J'ai une UIScrollView qui s'affiche en position 0,0 dans un navigationController sans NavigationBar. La statusBar est transparente donc ma scrollview s'affiche bien dessous et c'est ce que je veux. Dans cette scrollView, j'y met une UIImageView. Avec les contraintes qui vont bien, ma UIImageView est bien en position 0,0 mais truc super énervant, mon imageView se met systématiquement 20 points plus bas, c-a-d en dessous de la statusBar. Pourtant la scrollView est bien en 0,0 ET sous la status bar.


 


La magie de la chose, c'est que le navigationController envoie un message à  la scrollView pour qu'elle mette un contentInset automatiquement.


 


La solution que j'ai trouvé est étrange...


 


Dans mon xib, la première vue était ma scrollView. J'ai ajouté une UIView en première position (que je mets "hidden") et hop, le tour est joué !


 


Y a t il plus élégant ?


Réponses

  • AliGatorAliGator Membre, Modérateur
    décembre 2014 modifié #2
    Je suis pas sûr que ton "astuce" marche avec toutes les versions d'iOS, le autoAdjust du contentInset étant + intelligent sur les dernières versions (et donc potentiellement + agressif)


    La bonne solution est plutôt de lui demander d'une PAS ajuster le contentInsetde tesscrollViews. C'est juste une case à  décocher dans la palette d'inspecteur du ViewController (et non delà  ScrollView).


    La propriété en question s'appelle automaticallyAdjustsScrollViewInsets
  • LeChatNoirLeChatNoir Membre, Modérateur

    ok. Je vais donc revoir ça.


    Mais j'avais cru comprendre que cette option n'apparaissait que si on utilisait Storyboard ?

  • AliGatorAliGator Membre, Modérateur
    Heu possible j'ai pas vérifié mais bon même si c'était le cas c'est pas un problème suffit de le faire par code dans le init genre.
  • LeChatNoirLeChatNoir Membre, Modérateur

    Je confirme Ali  o:)


     


    Dans la méthode 


    - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil


     

    un petit 

     



    self.automaticallyAdjustsScrollViewInsets=NO;


    et le tour est joué !


    Merci :)


Connectez-vous ou Inscrivez-vous pour répondre.