2013-08-31 8 views
1

Je veux que l'étiquette ci-dessous (en jaune) soit au moins deux lignes plutôt qu'une.UILabel ne pas dessiner multiligne

problem

Je me suis assuré de décocher Use Autolayout dans Interface Builder. Lorsque je mets numberOfLines de 0 à 2, je reçois deux mots empilés les uns sur les autres, avec le fond jaune qui correspond bien aux mots. Le résultat est le même, que le lineBreakMode soit NSLineBreakByWordWrapping ou NSLineBreakByTruncatingTail. C'est également pareil si je mets le cadre des termes Label en utilisant le résultat de sizeWithAttributes ou pas, et c'est pareil si j'utilise sizeToFit ou non. J'ai également essayé de faire l'étiquette un UILabel plutôt qu'une sous-classe de UILabel, qui est TTTAttributedLabel, mais le résultat est le même.

_termsLabel.font = [UIFont systemFontOfSize:12]; 
_termsLabel.textColor = [UIColor grayColor]; 
_termsLabel.textAlignment = NSTextAlignmentCenter; 
_termsLabel.lineBreakMode = NSLineBreakByWordWrapping; 
_termsLabel.numberOfLines = 0; 
_termsLabel.delegate = self; 
_termsLabel.backgroundColor = [UIColor yellowColor]; 

// Terms label 
NSString *termsText = [NSString stringWithFormat:@"%@ %@ %@ %@", NSLocalizedString(@"TermsIAgree", nil), 
                   NSLocalizedString(@"SettingsTOS", nil), 
                   NSLocalizedString(@"LocalizedAnd", nil), 
                   NSLocalizedString(@"SettingsPrivacyPolicy", nil)]; 

_termsLabel.text = termsText; 
_termsLabel.linkAttributes = @{ (__bridge NSString *)kCTUnderlineStyleAttributeName : [NSNumber numberWithBool:YES]}; 
CGSize termsSize = [_termsLabel.text sizeWithAttributes: @{ NSFontAttributeName : _termsLabel.font}]; 
_termsLabel.frame = CGRectMake(65, 
           395, 
           termsSize.width, termsSize.height); 

[_termsLabel addLinkToURL:[NSURL URLWithString:TOS_URL] withRange:[termsText rangeOfString:NSLocalizedString(@"SettingsTOS", nil)]]; 
[_termsLabel addLinkToURL:[NSURL URLWithString:PRIVACY_POLICY_URL] withRange:[termsText rangeOfString:NSLocalizedString(@"SettingsPrivacyPolicy", nil)]]; 

EDIT: En trouvant la taille du texte des termes en utilisant CGSize termsSize = [_termsLabel.text sizeWithFont:_termsLabel.font forWidth:200 lineBreakMode:NSLineBreakByWordWrapping]; Pourtant, le height du termsSize est alors 14, entraînant une seule ligne:

enter image description here

Comment puis-je obtenir la deuxième ligne? SOLUTION À ce stade, ajoutez simplement [_termsLabel sizeToFit].

+0

Est-ce que la taille de 'termsSize' correspondent à la taille de l'étiquette? Ou est-ce que le cadre change à un moment donné? –

+0

Voir ma modification. . . –

Répondre

2

Si vous disposez d'un texte statique, définissez simplement le mode de coupure pour l'envelopper, définissez des lignes sur le nombre souhaité et ajustez le cadre de l'étiquette dans le générateur d'interface jusqu'à ce qu'il se déroule comme vous le souhaitez. Vous avez un texte dynamique, vous pouvez utiliser sizeToFit après avoir défini le texte de l'étiquette pour avoir ajuster automatiquement sa hauteur à la largeur spécifiée:

  1. Armature max souhaitée largeur
  2. lignes Set à 0
  3. Set mode pause pour envelopper
  4. Appel sizeToFit
1

Déterminez la largeur maximale de votre étiquette et essayez la méthode sizeWithFont:forWidth:lineBreakMode: avec cette valeur et la NSLineBreakMode souhaitée pour obtenir la taille de la boîte englobante de la chaîne résultante.

+0

Merci, voir mon édition. –

Questions connexes