J'ai un Uilabel avec le Merci d'avance! P> LinebreakMode Code> défini sur
UilinebreakModewordwordwrap code>. Cela fonctionne bien, sauf lorsque j'ai une longue dalle de texte sans espaces. Dans ce cas, il ne enveloppe pas la longue dalle de texte, mais plutôt la coupe une fois qu'elle atteint l'extrémité droite du cadre d'Uilabel. Comment puis-je dire à l'Uilabel qu'il devrait envelopper sur une limite de caractère dans cette situation
uilinebreakmodecharacterwrap code>, mais uniquement pour ces longues dalles de textes sans espace) . p>
4 Réponses :
Vous devez le faire vous-même, il n'y a pas d'option pour ' Utiliser un word d'emballage sauf lorsque je ne veux pas que vous em>' :) p>
Si un mot était trop long, vous pouvez insérer des espaces avant de l'afficher pour aider l'étiquette savoir où envelopper? P>
Un moyen de faire cela est de définir la propriété Lines dans IB.
p>
ou du code FAIRE Ceci - P>
textLabel.lineBreakMode = UILineBreakModeWordWrap; textLabel.numberOfLines = 3;
L'OP veut spécifiquement "Word Wrap" qui ne s'enriste pas s'il a un mot unique (par exemple 'llanfairpwllgwyngyllgogochwyrndrobwlllantysiliogwllllantysiliogwlllllantysiliogogoogoch', qui est plus large que la zone de texte), peu importe le nombre de lignes que vous le donnez :)
Dean a raison. Si vous le voulez, vous devez le faire manuellement. Le code ci-dessous trouvera WordWrap une étiquette même si elle ne placez pas. Cela peut aider
NSString *someText = yourLabel.text; //Check if the text contains spaces //The method in the below if condition is user defined and you have to define one. lol if(![self textContainsSpaces:someText]) { //Do the word wrap manually CGSize constraintSize; constraintSize.width = 165; constraintSize.height = 165; CGSize stringSize =[someText sizeWithFont: [UIFont boldSystemFontOfSize: 17] constrainedToSize: constraintSize lineBreakMode: UILineBreakModeWordWrap]; CGRect rect = CGRectMake(yourLabel.frame.origin.x, yourLabel.frame.origin.y, 165, (stringSize.height+10)); yourLabel.frame = rect; }
Pour quelqu'un d'autre ayant le même problème, j'ai fini par résoudre en utilisant un Il ne nécessite pas de comportement personnalisé pour déterminer si le texte contient des espaces et modifier le mode de pause de ligne du Plus important encore, il existe un boîtier d'Edge par lequel vous pourriez avoir des mots normaux (que vous souhaitez envelopper des limites de mots), plus un texte supplémentaire long (dont vous avez besoin pour envelopper les limites de caractères). Un peu d'écriture d'une sorte de logique pour insérer un espace dans ce texte très long (à la bonne position) pour forcer un "faux work wrap", je ne peux pas voir le moyen de gérer l'emballage sur des mots et des caractères, en fonction de la situation, dans l'un Pour des spécificités sur la façon dont je le fais, j'ai une ligne J'espère que cela vous aide! P> uitextview code> au lieu d'un
uilabel code>. C'était la meilleure solution pour deux raisons: p>
Uilabel code> sur / de work word / de caractère. p> < / li>
Uilabel code>. Le
uitextview code> gère cette situation automatiquement, brisant les limites de mots ou les limites de caractères si nécessaire. P> li>
ol>
uitextview code> avec édition et défilement désactivé. Je définis également le
.Contentinset code> pour supprimer le remplissage de la randonnée (à l'œil sans méfiance), comme un
Uilabel code>. J'utilise ensuite le
Taillewithfont: contraintTosize: LinebreakMode: CODE> Méthode pour déterminer le cadre du texte rendu et ajuster le cadre du
uitexview code> en conséquence pour qu'il correspond exactement au texte . p>
Note pour les futurs lecteurs (comme moi): essais avec iOS 7 et SDK 8, UilinebreakModewordwordwrap semble fonctionner comme on pourrait espérer maintenant. C'est-à-dire qu'il rompt par mot si possible, mais par caractère si nécessaire. Ceci si pour un Uilabel.