est-ce que j'ai possibilité de limiter le nombre de caractères sur un des NSAttributedString ?
En effet concernant celui ci-dessous (commentaire) je souhaiterais qu'il ne fasse qu'une longueur de 50 caractères maxi. Au-delà des 50 j'aimerais qu'il se termine par "..."
(je suis conscient que ça devient très compliqué...)
est-ce que j'ai possibilité de limiter le nombre de caractères sur un des NSAttributedString ? En effet concernant celui ci-dessous (commentaire) je souhaiterais qu'il ne fasse qu'une longueur de 50 caractères maxi. Au-delà des 50 j'aimerais qu'il se termine par "..."
Habituellement, on ne le fait pas. UILabel affiche lui-même l'ellipse (...) si le texte est trop long. C'est assez logique, parce que ce qui compte n'est pas la longueur de la chaà®ne, mais la place dont on dispose à l'écran, qui peut d'ailleurs varier.
Je comprends tout à fait la logique de Céroce, mais dans mon cas j'ai ajouté un 4ème NSAttributedString, voyez ci-dessous la construction de mon label, je veux seulement limiter le nombre de caractères du 3ème "placeholder":
C'est étrange comme choix que de vouloir faire une ellipse en plein milieu d'un string.
Peut-être que ton design n'est pas bon.
C'est tout à fait possible, mais tu préfères compter le nombre de caractères plutôt que l'espace final ? À moins d'utiliser des polices monospace, c'est perturbant.
Je comprends tout à fait la logique de Céroce, mais dans mon cas j'ai ajouté un 4ème NSAttributedString, voyez ci-dessous la construction de mon label, je veux seulement limiter le nombre de caractères du 3ème "placeholder":
C'est étrange comme choix que de vouloir faire une ellipse en plein milieu d'un string.
Peut-être que ton design n'est pas bon.
C'est tout à fait possible, mais tu préfères compter le nombre de caractères plutôt que l'espace final ? À moins d'utiliser des polices monospace, c'est perturbant.
certes mon choix de design est alambiqué et je pourrais le concevoir autrement mais néanmoins il très esthétique,
concrètement
- le placeholder3 correspond au commentaire d'un utilisateur (potentiellement très long c'est pourquoi je veux le limiter)
- le placeholder4 indique une information temporelle (issue de _timeIntervalFormatter)
Si l'utilisateur appuie sur la cellule concernée il pourra voir le commentaire en entier sur un second controller
J'utiliserais un autre label pour ça. Ainsi, il est coupé automatiquement notamment via sa largeur rendue (en terme d'UI) et non pas via sa longueur en nombre de caractères, car comme je l'ai dit précédemment, si tu as "HELLO" et "iiiii" ont le même nombre de caractères mais en prendront certainement pas la même place.
J'utiliserais un autre label pour ça. Ainsi, il est coupé automatiquement notamment via sa largeur rendue (en terme d'UI) et non pas via sa longueur en nombre de caractères, car comme je l'ai dit précédemment, si tu as "HELLO" et "iiiii" ont le même nombre de caractères mais en prendront certainement pas la même place.
Et, c'est pour les raisons comme ça que j'ai proposé d'utiliser autolayout, soit avec ou sans UIStackView
Très juste , vous m'avez convaincu je vais changer mon fusil d'épaule, certainement un stack view comme conseillé par Joanna ça me semble la solution la plus adaptée à ce que je souhaite faire , encore merci à tous !
Réponses
dernière petite question sur le sujet :
est-ce que j'ai possibilité de limiter le nombre de caractères sur un des NSAttributedString ?
En effet concernant celui ci-dessous (commentaire) je souhaiterais qu'il ne fasse qu'une longueur de 50 caractères maxi. Au-delà des 50 j'aimerais qu'il se termine par "..."
(je suis conscient que ça devient très compliqué...)
+1 avec Ceroce.
Si jamais tu veux tout de même avoir 50 caractères tu peux faire un truc du genre (swift) :
Je ne sais pas si on peut faire la même chose en Obj-C, Jérémy.
Jopaone peut utiliser la fonction substring() pour extraire une partie d'un NSString.
a
a
Je comprends tout à fait la logique de Céroce, mais dans mon cas j'ai ajouté un 4ème NSAttributedString, voyez ci-dessous la construction de mon label, je veux seulement limiter le nombre de caractères du 3ème "placeholder":
C'est étrange comme choix que de vouloir faire une ellipse en plein milieu d'un string.
Peut-être que ton design n'est pas bon.
C'est tout à fait possible, mais tu préfères compter le nombre de caractères plutôt que l'espace final ? À moins d'utiliser des polices monospace, c'est perturbant.
Il est plus astucieux de tester l'espace d'affichage de la chaà®ne. Regarde ce post : http://forum.cocoacafe.fr/topic/14073-swiftresoluaffichage-dune-nsattributedstring-avec-une-contrainte-de-largeur/?hl=nsattributedstring
certes mon choix de design est alambiqué et je pourrais le concevoir autrement mais néanmoins il très esthétique,
concrètement
- le placeholder3 correspond au commentaire d'un utilisateur (potentiellement très long c'est pourquoi je veux le limiter)
- le placeholder4 indique une information temporelle (issue de _timeIntervalFormatter)
Si l'utilisateur appuie sur la cellule concernée il pourra voir le commentaire en entier sur un second controller
Je crois que tu confonds l'idée de présentation avec les données que tu veuilles présenter.
Avec le Unicode pour les strings, c'est plus difficile de trouver les substrings en Swift qu'en Objective-C.
UILabel s'occupe déjà des ellipses et du coup, je reviens avec ma suggestion de mettre trois UILabels dan un UIStackView.
J'utiliserais un autre label pour ça. Ainsi, il est coupé automatiquement notamment via sa largeur rendue (en terme d'UI) et non pas via sa longueur en nombre de caractères, car comme je l'ai dit précédemment, si tu as "HELLO" et "iiiii" ont le même nombre de caractères mais en prendront certainement pas la même place.
Et, c'est pour les raisons comme ça que j'ai proposé d'utiliser autolayout, soit avec ou sans UIStackView
Très juste , vous m'avez convaincu je vais changer mon fusil d'épaule, certainement un stack view comme conseillé par Joanna ça me semble la solution la plus adaptée à ce que je souhaite faire , encore merci à tous !
Petit conseil : mettre le Horizontal Content Compression Resistance de la première label à 751 pour qu'elle ne se raccourcisse pas