Espace entre un label et son texte
Bonjour,
Je ne sais pas si c'est possible ou non, mais après avoir cherché durant plusieurs heures je m'adresse à vous.
Bon voila j'ai un label (avec un fond bleu ou vert dans le cas du screenshot), et j'ai un texte dans ce label.
J'aimerais que ce texte ne soit pas autant collé au X de l'UILabel, qu'il y ai un espace entre le début de mon label et mon texte (genre X du label = 200, X du texte = 205), et cela quelque soit la ligne (car oui ces labels peuvent avoir plusieurs lignes, selon leurs contenus).
Bien évidemment je ne veut pas mettre cet espace manuellement (et surtout cela ne marche pas dans le cas ou j'ai plusieurs lignes).
Mettre un autre label avec un fond transparent par dessus celui existant ne me plait guère plus comme solution.
Merci d'avance
Réponses
Une autre solution est d'utiliser une NSView derrière (pas parente!) et autolayout. Tu ajouterais 4 contraintes pour que la NSView déborde en haut, à gauche, en bas et à droite.
Sinon, il reste toujours la solution de mettre le label en enfant d'une NSView, mais dans ce cas, il faut calculer la taille de la vue parente en fonction de la taille du texte.
Je ne souhaite pas utilise l'autolayout, vu que je doit gérer différentes tailles.
Sinon oui le label est à l'intérieur d'une UIScrollView
J'ai pas réellement compris ce que tu voulais...
Mais tu es dans la section OS X, tu parles de UILabel et de UIScrollView, et Céroce de NSView...
La problématique globale semble être la même, mais quand même. Vu que certains trucs existent sur une plateforme mais pas l'autre...
Sinon, peut UIEdgeInset, ou un truc du genre, ou alors un NSParagraphStyle et son indent.
Oups désolé je me suis trompé de section, si un modérateur pouvais le déplacer
En fait c'est peut être plus clair avec le screen, le texte démarre collé à la bordure gauche du label, et en fait j'aimerais qu'il y ai un espacement entre cette bordure gauche et mon texte
Je ferais ainsi (codé de tête, pas sûr que ça compile), car je joue beaucoup avec les NSAttributedString en ce moment :
Différents tailles de quoi ? Avec autolayout la disposition des views s'adaptent selon leurs tailles
Différentes tailles de devices, mon application doit tourner aussi bien sur de l'iPhone 3GS/4/4S (3,5 inches) que sur du 5/5C/5S (4 inches) et dans le futur également sur toutes les tablettes Apple
L'autolayout est fait expressément pour ça
Encore un truc erroné donné par mon professeur.
Quelle taille d'écran l'iPhone 6, désolé l'info m'a échappée.
Qu'est-ce qu'il à dit sur l'autolayout ?
Ce n'est pas important. ça c'est le but d'autolayout - de n'avoir pas de soucis sur la taille de l'écran
Sauf que ça me pose problème, avant j'avais l'autolayout et ça ne me mettais pas les éléments comme je le souhaitais.
Je retrouve plus les mots exact, mais grosso modo il avait dit qu'il fallait le décocher quand on voulais gérer des tailles différentes de devices
Dans quelle version de Xcode ? Il y avait des gros ennuis avec autolayout avant Xcode 5
Avant Xcode 5, il avait raison.
Et si tout simplement tu ajoutes avant l'affichage, 1 ou plusieurs caractères espace devant le texte de ton label.
Des espaces insécables ? (c'est possible ?)
Mauvaise idée
Terrible ton smiley
Pourquoi ? Enfin après c'est vrai que c'est un peu du bricolage à l'arrache. J'imagine que ça pète en fonction des tailles écran...
Hello,
J'opterai pour la solution de Céroce.
Sinon tu peux sous-classe ton UILabel et redéfinir drawTextInRect:.
Ha, oui, mince, il peut y avoir plusieurs lignes...
Personnellement j'irai vers une classe perso héritant de UILabel dans laquelle
1) j'ajoute des propriété de marges
2) j'ajoute un UIView à l'initialisation que je positionne en fonction des marges avec un background égal à celui du UILabel
3) je n'oublie pas de supprimer mon UIView dans le dealloc.
ça devrait avoir l'avantage d'être réutilisable sans problèmes partout.
On le saura en détail le 9 septembre, dans deux semaines. C'est demain, donc il faut y penser maintenant !
Xcode 5.1.1
Ca marche bien quand j'ai qu'une seule ligne, mais dans le cas ou j'ai plusieurs lignes ça marche tout de suite moins bien...
Peut tu m'en dire plus s'il te plait ?
Si tu utilises Xcode 5, tu peux profiter de autolayout sans aucun souci. Il ne te resterait qu'à apprendre comment mieux placer les contraintes
Si je voulait sous-classer UILabel, je redéfinirais textRectForBounds:limitedToNumberOfLines: au lieu de drawTextInRect:
Une manière simple est d'utiliser
La proposition de Larme semble la meilleure.
Si tu ne veux pas t'embêter avec le mode programmatique tu peux aussi spécifier tout cela dans le storyboard.
Il faut pour ton label choisir pour l'attribut text : "attibuted string"
Hello iLandes,
Tout d'abord merci d'avoir répondu, réponse fortement intéressante. Mais si je me fie à ton screen j'ai bien l'impression que ça n'indente que la 1ère ligne, hors idéalement j'aimerais indenter toutes les lignes
PS: Après l'avoir testé et ce malgré les réglages fait comme au dessus, j'ai pas de décalage sur la 1ère ligne
Pour info je fais comme ça dans mon code pour adapter la hauteur au contenu (peut être que le souci viens de la)
J'ai d'ailleurs un warning (que j'aimerais corriger, question de propreté, ne pas laisser de warning dans mon code)
Faut quand même chercher un peu.
Pour toutes les lignes il faut faire
Merci pour ta réponse si rapide, comme dit précédemment ça ne marche pas, est ce que c'est la faute à mon code pour adapter la hauteur du label à son contenu ?
J'aime pas du tout ton code. >:D
Pourquoi tu veux adapter la hauteur de ton label ? Il s'adapte pas tout seul en fonction du contenu ?