Non il ne s'adapte pas tout seul si je ne fais pas ça, il s'affiche uniquement sur une ligne
Et pour ceux qui pourraient s'étonner de voir cette méthode au lieu du sizeToFit c'est juste que j'ai besoin de récupérer les tailles et les emplacements de chaque UILabel, pour afficher l'autre en dessous
Désolé mais il te faut relire le manuel sur les Labels.
Les Labels ont une propriété lines qui permet de définir le nombre de lignes.
Définir soit même les tailles des objets standard est rarement une bonne idée. Cela sert souvent aux dev à contourner un problème qu'il ne maitrise pas. Je t'invite aussi à consulter la doc sur les Auto-Layouts qui permette d'ajuster automatiquement les view par rapport au device et à l'orientation.
Je connais bel et bien la propriété "lines" de l'UILabel seulement je ne sais pas d'avance si mon label va faire 1 ligne, ou bien 8 ou bien 40, donc quelle valeur je suis censé mettre ? 9999 ?
Et puis c'est ça peut être qui va augmenter automatiquement la hauteur de mon label (bah oui je vais pas faire un label de 500 px de hateur de hauteur si je n'ai qu'une ligne dedans) ? J'en doute très fortement
Après oui tu peux mettre un grand nombre de ligne pour prévoir. Grâce à cette fonction tu peux savoir que va faire ton label avec le NSString que tu lui passe en paramètre.
C'est la taille maximale que tu accepte d'allouer pour le label. C'est à dire que la fonction te retournera une valeur comprise entre 0 et la taille maximale que tu voudra mettre
Ben, qu'est-ce que tu veux accomplir ? Je devine que c'est quelque chose comme Messages.
Si oui, as-tu considéré d'utiliser un UITableView ?
Tu pourrais ajouter un label en autolayout dans une cellule et avec le minimum de code, determiner la taille de la cellule dont l'espace autour le label automatiquement !
ça serait beaucoup plus facile que de continuer à bidouiller avec tous ces trucs compliqués.
Je pourrais faire ce que tu essaies de faire en moins d'une heure.
Je connais bel et bien la propriété "lines" de l'UILabel seulement je ne sais pas d'avance si mon label va faire 1 ligne, ou bien 8 ou bien 40, donc quelle valeur je suis censé mettre ? 9999 ?
Et puis c'est ça peut être qui va augmenter automatiquement la hauteur de mon label (bah oui je vais pas faire un label de 500 px de hateur de hauteur si je n'ai qu'une ligne dedans) ? J'en doute très fortement
Alors, clairement, là , je t'invite à lire la doc :
numberOfLines The maximum number of lines to use for rendering text.
@property(nonatomic) NSInteger numberOfLines Discussion This property controls the maximum number of lines to use in order to fit the label's text into its bounding rectangle. The default value for this property is 1. To remove any maximum limit, and use as many lines as needed, set the value of this property to 0.
If you constrain your text using this property, any text that does not fit within the maximum number of lines and inside the bounding rectangle of the label is truncated using the appropriate line break mode.
When the receiver is resized using the sizeToFit method, resizing takes into account the value stored in this property. For example, if this property is set to 3, the sizeToFit method resizes the receiver so that it is big enough to display three lines of text.
Availability Available in iOS 2.0 and later.
Par rapport au bout de code que j'avais posté, il faut également setter le firstHeadIndent aussi je crois, et peut-être tester avec des valeurs plus grandes que 5.
Tout à fait je veut faire quelque chose comme Messages, mais avec des messages qui sont enregistrés et récupérés depuis une BDD.
A vrai dire non j'ai pas encore réfléchi à une TableView, des labels me paraissaient le plus logique, mais je peut me tromper.
Et une UITableView me semble la meilleure solution personnellement. Pas de merdes de scrolling, c'est géré, possibilité d'utiliser des Custom UITableViewCell, avec en prenant par exemple un argument afin de savoir si on doit être à gauche ou à droite, voire de gérer son background en fonction...
Actuellement tel que c'est actuellement ma propriété "lines" est déjà à 0, cependant comme dis plus haut, le nombre de lignes ne modifiera pas la hauteur de mon label, hors c'est ça qui compte en plus du nombre de lignes
Ok je vais me pencher et regarder comme faire cela grâce à une tableView
Et comment ça se passerait avec une tableView ? Un message par cellule ? Comment alterner pour afficher soit le fond en bleu soit en vert ?
Oui, un message par cellule. Pour alterner le côté sur lequel le message s'affiche et sa couleur, tu peux créer deux prototypes de cellule et tu peux les charger selon l'auteur du message.
Ben, tu trouveras un petit projet ci-joint, dans lequel je démontre les techniques autolayout et sous-classement pour réaliser un TableView, qui contient les cellules qui règlent leurs tailles, même une cellule qui contient un TableView qui contient les cellules qui règlent leurs tailles.
D'abord, tu ne verras qu'une cellule avec deux Labels mais, si tu faisais un long-press sur la cellule, elle se développera et tu pourras voir que la cellule est devenu assez complexe.
Réponses
Non il ne s'adapte pas tout seul si je ne fais pas ça, il s'affiche uniquement sur une ligne
Et pour ceux qui pourraient s'étonner de voir cette méthode au lieu du sizeToFit c'est juste que j'ai besoin de récupérer les tailles et les emplacements de chaque UILabel, pour afficher l'autre en dessous
Désolé mais il te faut relire le manuel sur les Labels.
Les Labels ont une propriété lines qui permet de définir le nombre de lignes.
Définir soit même les tailles des objets standard est rarement une bonne idée. Cela sert souvent aux dev à contourner un problème qu'il ne maitrise pas. Je t'invite aussi à consulter la doc sur les Auto-Layouts qui permette d'ajuster automatiquement les view par rapport au device et à l'orientation.
Courage...
Je connais bel et bien la propriété "lines" de l'UILabel seulement je ne sais pas d'avance si mon label va faire 1 ligne, ou bien 8 ou bien 40, donc quelle valeur je suis censé mettre ? 9999 ?
Et puis c'est ça peut être qui va augmenter automatiquement la hauteur de mon label (bah oui je vais pas faire un label de 500 px de hateur de hauteur si je n'ai qu'une ligne dedans) ? J'en doute très fortement
Tu peux savoir combien de "place" va faire ton label si tu connnais les dimensions maximales de ce label.
Grâce à cette petite fonction tu peux définir la taille du label :
Après oui tu peux mettre un grand nombre de ligne pour prévoir. Grâce à cette fonction tu peux savoir que va faire ton label avec le NSString que tu lui passe en paramètre.
Qu'est ce que la propriété boundedBySize s'il te plait ? Merci d'avance
C'est la taille maximale que tu accepte d'allouer pour le label. C'est à dire que la fonction te retournera une valeur comprise entre 0 et la taille maximale que tu voudra mettre
Ce code je l'utilise déjà actuellement dans mon fichier (cf plus haut)
Pardon, mais je recommence à zero.
Ben, qu'est-ce que tu veux accomplir ? Je devine que c'est quelque chose comme Messages.
Si oui, as-tu considéré d'utiliser un UITableView ?
Tu pourrais ajouter un label en autolayout dans une cellule et avec le minimum de code, determiner la taille de la cellule dont l'espace autour le label automatiquement !
ça serait beaucoup plus facile que de continuer à bidouiller avec tous ces trucs compliqués.
Je pourrais faire ce que tu essaies de faire en moins d'une heure.
Tout à fait je veut faire quelque chose comme Messages, mais avec des messages qui sont enregistrés et récupérés depuis une BDD.
A vrai dire non j'ai pas encore réfléchi à une TableView, des labels me paraissaient le plus logique, mais je peut me tromper.
"Use the Force Luke" ::)
Le TableView serait très facile
Pardon, pour mon indication , j'avais pas vu que l'on t'avais proposé la solution déjà ( et j'avais lu pourtant.. )
De ce que j'ai lu, et j'espère ne pas me tromper, le mieux est d'utiliser les UIEdgeInsets. Ca semble être ce qui correspond le mieux à ton problème.
Et comment ça se passerait avec une tableView ? Un message par cellule ? Comment alterner pour afficher soit le fond en bleu soit en vert ?
Ok je vais regarder un peu comment marche les UIEdgeInsets, merci
Les UIEdgeInsets ne s'appliquent pas aux labels, sauf si on le sous-classe
Par rapport au bout de code que j'avais posté, il faut également setter le firstHeadIndent aussi je crois, et peut-être tester avec des valeurs plus grandes que 5.
Et une UITableView me semble la meilleure solution personnellement.
Pas de merdes de scrolling, c'est géré, possibilité d'utiliser des Custom UITableViewCell, avec en prenant par exemple un argument afin de savoir si on doit être à gauche ou à droite, voire de gérer son background en fonction...
Actuellement tel que c'est actuellement ma propriété "lines" est déjà à 0, cependant comme dis plus haut, le nombre de lignes ne modifiera pas la hauteur de mon label, hors c'est ça qui compte en plus du nombre de lignes
Ok je vais me pencher et regarder comme faire cela grâce à une tableView
Oui, un message par cellule. Pour alterner le côté sur lequel le message s'affiche et sa couleur, tu peux créer deux prototypes de cellule et tu peux les charger selon l'auteur du message.
Ok merci pour ces conseils précieux
Ben, tu trouveras un petit projet ci-joint, dans lequel je démontre les techniques autolayout et sous-classement pour réaliser un TableView, qui contient les cellules qui règlent leurs tailles, même une cellule qui contient un TableView qui contient les cellules qui règlent leurs tailles.
D'abord, tu ne verras qu'une cellule avec deux Labels mais, si tu faisais un long-press sur la cellule, elle se développera et tu pourras voir que la cellule est devenu assez complexe.
Ok merci
Pardon, il faut aller à Build Phases | Link Binary With Libraries et enlever Reveal
Oh, et n'oublies pas de faire la rotation