10
votes

WORD WORD UILABEL / enveloppement de caractère

J'ai un Uilabel avec le LinebreakMode défini sur UilinebreakModewordwordwrap . 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 uniquement (essentiellement équivalente au paramètre uilinebreakmodecharacterwrap , mais uniquement pour ces longues dalles de textes sans espace) .

Merci d'avance!


1 commentaires

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.


4 Réponses :


0
votes

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 ' :)

Si un mot était trop long, vous pouvez insérer des espaces avant de l'afficher pour aider l'étiquette savoir où envelopper?


0 commentaires

3
votes

Un moyen de faire cela est de définir la propriété Lines dans IB.

Entrez la description de l'image ici p>

ou du code FAIRE Ceci - P>

textLabel.lineBreakMode = UILineBreakModeWordWrap;
textLabel.numberOfLines = 3;


1 commentaires

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 :)



0
votes

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;
        }


0 commentaires

10
votes

Pour quelqu'un d'autre ayant le même problème, j'ai fini par résoudre en utilisant un uitextview au lieu d'un uilabel . C'était la meilleure solution pour deux raisons:

  1. 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 Uilabel sur / de work word / de caractère. < / li>

  2. 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 Uilabel . Le uitextview gère cette situation automatiquement, brisant les limites de mots ou les limites de caractères si nécessaire.

    Pour des spécificités sur la façon dont je le fais, j'ai une ligne uitextview avec édition et défilement désactivé. Je définis également le .Contentinset pour supprimer le remplissage de la randonnée (à l'œil sans méfiance), comme un Uilabel . J'utilise ensuite le Taillewithfont: contraintTosize: LinebreakMode: Méthode pour déterminer le cadre du texte rendu et ajuster le cadre du uitexview en conséquence pour qu'il correspond exactement au texte .

    J'espère que cela vous aide!


0 commentaires