Auto resize Label par rapport à  son contenu

Bonjour, 


 


Je n'arrive pas à  faire une task qui me semble anodine mais pourtant.


 


Je m'explique, j'ai créer un ViewController via storyboard, cette vu comprend plusieurs UIview avec un UILabel dedans.


 


Auto layout et size class done, tout est parfait comme je le voulais.


 


Le problème, c'est que quand un de ces texte contenus son plus long, la frame de mon UILabel de ne resize pas, du coup, le texte est tronqué.


 


Fait effectué beaucoup de recherche, essayer avec le clicOdrome ainsi qu'en programmatique.



myLabel.numberOfLines = 0
myLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
myLabel.adjustsFontSizeToFitWidth ! true
myLabel.sizeToFit()

petite mistake dans le code "!" => "="


 


Une autre question, lors d'une implémentation via Storyboard ET une implémentation dans le viewDidLoad, lequel prime, j'ai l'impression que Storyboard remporte le combat.


 


En espérant avoir été clair.


 


Merci.


Bien à  vous.


Réponses

  • CéroceCéroce Membre, Modérateur
    février 2016 modifié #2

    Le problème, c'est que quand un de ces texte contenus son plus long, la frame de mon UILabel de ne resize pas, du coup, le texte est tronqué.

    Un UILabel a une taille "intrinsèque" qui dépend du texte qu'il contient. Donc, normalement, tu ne dois pas définir sa taille. Définis seulement sa position " à  la rigueur sa taille maximum.
     

    Une autre question, lors d'une implémentation via Storyboard ET une implémentation dans le viewDidLoad, lequel prime, j'ai l'impression que Storyboard remporte le combat.

    Le storyboard instancie des UIViewControllers, donc -viewDidLoad sera appelée quand la vue sera chargée, comme d'habitude.
  • DarknightDarknight Membre
    février 2016 modifié #3

    ok très bien !!! je vous fait un retour !!! 


     


    Par contre j'ai pas trop saisi le cycle de vie d'une vue !!!


     


    Quels méthode est appelé avant le changement de la vue ???


     


    Merci


  • CéroceCéroce Membre, Modérateur
    La méthode -viewWillAppear est appelée juste avant l'affichage de la vue.
    Le storyboard aura déjà  appelé -prepareForSegue:sender.
  • Ok mais du coup par exemple, j'ai un UIScrollView dans mon storyboard avec une width de 1000 par exemple, quand j'instancie un UIView dans viewDidLoad avec une width de myScrollView.frame.width, elle ne fait pas du tout 1000 par contre quand je le fait dans le viewDidAppear c'est good !!!


     


    Du coup pourquoi pas travailler avec le viewDidAppear au lieu du viewDidLoad ???


     


    Sorry pour toute ces questions !!!!


     


    Merci 


  • CéroceCéroce Membre, Modérateur
    Dans -viewDidLoad, la vue est chargée et a donc la taille définie dans le Storyboard/xib. Dans viewDidAppear, la vue est à  l'écran et les contraintes autolayout ont été appliquées.

    Si tu utilises l'autolayout, ne modifie pas les tailles toi-même.
  • Ok très bien mais pour moi les contraintes autolayout c'est du magic happend !!! Mais bon avec le temps ce ne sera plus un mystère.


     


    En tout cas merci de toutes ces réponses.


     


    Bien à  vous.

  • Je reviens, 


     




    Dans -viewDidLoad, la vue est chargée et a donc la taille définie dans le Storyboard/xib. Dans viewDidAppear, la vue est à  l'écran et les contraintes autolayout ont été appliquées.


    Si tu utilises l'autolayout, ne modifie pas les tailles toi-même.




     


    Si j'ai une viewArticle contenant un article par exemple dans mon storyboard et que je veux pouvoir afficher n article selon les cas il va bien falloir le faire en programmatique. 


  • Joanna CarterJoanna Carter Membre, Modérateur
    février 2016 modifié #9
    La programmatique n'est pas nécessaire. On peut tout faire avec autolayout
  • Un jour, quand je serais plus grand, j'aimerais vous ressembler !!!  :o


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