web-dev-qa-db-fra.com

Ajuster la hauteur de UILabel en fonction du texte

Considérez que j'ai le texte suivant dans un UILabel (une longue ligne de texte dynamique):

Étant donné que l'armée étrangère dépasse largement l'équipe, les joueurs doivent utiliser le monde post-apocalyptique à leur avantage, par exemple en se cachant derrière des bennes à ordures, des piliers, des voitures, des gravats et d'autres objets.

Je souhaite redimensionner la hauteur UILabel's afin que le texte puisse s'intégrer. J'utilise les propriétés suivantes de UILabel pour que le texte qu'il contient soit renvoyé à la ligne.

myUILabel.lineBreakMode = UILineBreakModeWordWrap;
myUILabel.numberOfLines = 0;

S'il vous plaît laissez-moi savoir si je ne vais pas dans la bonne direction. Merci.

307
Mustafa

sizeWithFont constrainedToSize:lineBreakMode: est la méthode à utiliser. Voici un exemple d'utilisation:

//Calculate the expected size based on the font and linebreak mode of your label
// FLT_MAX here simply means no constraint in height
CGSize maximumLabelSize = CGSizeMake(296, FLT_MAX);

CGSize expectedLabelSize = [yourString sizeWithFont:yourLabel.font constrainedToSize:maximumLabelSize lineBreakMode:yourLabel.lineBreakMode];   

//adjust the label the the new height.
CGRect newFrame = yourLabel.frame;
newFrame.size.height = expectedLabelSize.height;
yourLabel.frame = newFrame;
407
PyjamaSam

Vous alliez dans la bonne direction. Tout ce que vous devez faire c'est:

myUILabel.numberOfLines = 0;
myUILabel.text = @"Enter large amount of text here";
[myUILabel sizeToFit];
237
DonnaLea

Dans iOS 6, Apple a ajouté une propriété à ILabel qui simplifie considérablement le redimensionnement dynamique des étiquettes: preferredMaxLayoutWidth.

L'utilisation de cette propriété en combinaison avec lineBreakMode = NSLineBreakByWordWrapping et sizeToFit permet facilement redimensionnez une instance UILabel à la hauteur qui contient tout le texte.

Une citation de la documentation iOS:

preferredMaxLayoutWidth La largeur maximale recommandée (en points) pour une étiquette multiligne.

Discussion Cette propriété affecte la taille de l'étiquette lorsque des contraintes de présentation lui sont appliquées. Lors de la mise en page, si le texte dépasse la largeur spécifiée par cette propriété, le texte supplémentaire est transféré dans une ou plusieurs nouvelles lignes, ce qui augmente la hauteur de l'étiquette.

Un échantillon:

...
UILabel *status = [[UILabel alloc] init];
status.lineBreakMode = NSLineBreakByWordWrapping;
status.numberOfLines = 5; // limits to 5 lines; use 0 for unlimited.

[self addSubview:status]; // self here is the parent view

status.preferredMaxLayoutWidth = self.frame.size.width; // assumes the parent view has its frame already set.

status.text = @"Some quite lengthy message may go here…";
[status sizeToFit];
[status setNeedsDisplay];
...
42
Vitali Tchalov

Au lieu de le faire par programme, vous pouvez le faire dans Storyboard/XIB lors de la conception.

  • Définissez la propriété nombre de lignes de UIlabel sur dans l'inspecteur d'attributs.
  • Définissez ensuite la contrainte de largeur/(ou) la contrainte de début et de fin selon l'exigence.
  • Ensuite, définir la contrainte de hauteur avec valeur minimale. Enfin, sélectionnez la contrainte de hauteur que vous avez ajoutée et, dans l'inspecteur de taille, celle à côté de l'inspecteur d'attributs, changez la contrainte de hauteur relation de égal à - - supérieur à.
36
Pavithra Duraisamy

Vérifiez ce travail parfaitement sans ajouter une seule ligne de code. (Utiliser Autolayout)

J'ai fait une démo selon vos besoins. Téléchargez le lien ci-dessous,

Taille automatique UIView et UILabel

Guide étape par étape: -

Étape 1: - Définissez la contrainte sur UIView.

1) Premier 2) Top 3) Trailing (De mainview)

enter image description here

Étape 2: - Définissez contraint sur Label 1

1) Leading 2) Top 3) Trailing (De sa superview)

enter image description here

Étape 3: - Définissez contraint sur Label 2

1) Première 2) Trailing (De sa superview)

enter image description here

Étape 4: - Le plus délicat donne botton à UILabel à partir de UIView.

enter image description here

Étape 5: - (facultatif) Définissez contraint sur UIButton.

1) avant 2) en bas 3) en queue 4) hauteur fixe (de la vue principale)

enter image description here

Sortie: -

enter image description here

Remarque: - Assurez-vous que vous avez défini Nombre de lignes = 0 dans la propriété Label.

enter image description here

J'espère que cette information est suffisante pour comprendre Autoresize UIView en fonction de la hauteur de UILabel et Autoresize UILabel en fonction du texte.

34
Badal Shah

Merci les gars pour l'aide, voici le code que j'ai essayé qui fonctionne pour moi

   UILabel *instructions = [[UILabel alloc]initWithFrame:CGRectMake(10, 225, 300, 180)];
   NSString *text = @"First take clear picture and then try to zoom in to fit the ";
   instructions.text = text;
   instructions.textAlignment = UITextAlignmentCenter;
   instructions.lineBreakMode = NSLineBreakByWordWrapping;
   [instructions setTextColor:[UIColor grayColor]];

   CGSize expectedLabelSize = [text sizeWithFont:instructions.font 
                                constrainedToSize:instructions.frame.size
                                    lineBreakMode:UILineBreakModeWordWrap];

    CGRect newFrame = instructions.frame;
    newFrame.size.height = expectedLabelSize.height;
    instructions.frame = newFrame;
    instructions.numberOfLines = 0;
    [instructions sizeToFit];
    [self addSubview:instructions];
15
iappdeveloper

Solution pour iOS7 antérieure et iOS7 ci-dessus

//
//  UILabel+DynamicHeight.m
//  For StackOverFlow
//
//  Created by Vijay on 24/02/14.
//  Copyright (c) 2014 http://Vijay-Apple-Dev.blogspot.com. All rights reserved.
//

#import <UIKit/UIKit.h>

#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v)  ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)

#define SYSTEM_VERSION_LESS_THAN(v)                 ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] == NSOrderedAscending)

#define iOS7_0 @"7.0"

@interface UILabel (DynamicHeight)

/*====================================================================*/

/* Calculate the size,bounds,frame of the Multi line Label */

/*====================================================================*/
/**
 *  Returns the size of the Label
 *
 *  @param aLabel To be used to calculte the height
 *
 *  @return size of the Label
 */

-(CGSize)sizeOfMultiLineLabel;

@end


//
//  UILabel+DynamicHeight.m
//  For StackOverFlow
//
//  Created by Vijay on 24/02/14.
//  Copyright (c) 2014 http://Vijay-Apple-Dev.blogspot.com. All rights reserved.
//

#import "UILabel+DynamicHeight.h"

@implementation UILabel (DynamicHeight)
/*====================================================================*/

/* Calculate the size,bounds,frame of the Multi line Label */

/*====================================================================*/
/**
 *  Returns the size of the Label
 *
 *  @param aLabel To be used to calculte the height
 *
 *  @return size of the Label
 */
-(CGSize)sizeOfMultiLineLabel{

    NSAssert(self, @"UILabel was nil");

    //Label text
    NSString *aLabelTextString = [self text];

    //Label font
    UIFont *aLabelFont = [self font];

    //Width of the Label
    CGFloat aLabelSizeWidth = self.frame.size.width;


    if (SYSTEM_VERSION_LESS_THAN(iOS7_0)) {
        //version < 7.0

        return [aLabelTextString sizeWithFont:aLabelFont
                            constrainedToSize:CGSizeMake(aLabelSizeWidth, MAXFLOAT)
                                lineBreakMode:NSLineBreakByWordWrapping];
    }
    else if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(iOS7_0)) {
        //version >= 7.0

        //Return the calculated size of the Label
        return [aLabelTextString boundingRectWithSize:CGSizeMake(aLabelSizeWidth, MAXFLOAT)
                                              options:NSStringDrawingUsesLineFragmentOrigin
                                           attributes:@{
                                                        NSFontAttributeName : aLabelFont
                                                        }
                                              context:nil].size;

    }

    return [self bounds].size;

}

@end

Depuis sizeWithFont est obsolète, j'utilise celui-ci à la place.

celui-ci obtenir des attributs spécifiques à l'étiquette.

-(CGFloat)heightForLabel:(UILabel *)label withText:(NSString *)text{

    NSAttributedString *attributedText = [[NSAttributedString alloc] initWithString:text attributes:@{NSFontAttributeName:label.font}];
    CGRect rect = [attributedText boundingRectWithSize:(CGSize){label.frame.size.width, CGFLOAT_MAX}
                                           options:NSStringDrawingUsesLineFragmentOrigin
                                           context:nil];

    return ceil(rect.size.height);
}
10
pkarc

Voici une version de la catégorie:

ILabel + AutoSize.h #import

@interface UILabel (AutoSize)

- (void) autosizeForWidth: (int) width;

@end

ILabel + TailleAuto.m

#import "UILabel+AutoSize.h"

@implementation UILabel (AutoSize)

- (void) autosizeForWidth: (int) width {
    self.lineBreakMode = UILineBreakModeWordWrap;
    self.numberOfLines = 0;
    CGSize maximumLabelSize = CGSizeMake(width, FLT_MAX);
    CGSize expectedLabelSize = [self.text sizeWithFont:self.font constrainedToSize:maximumLabelSize lineBreakMode:self.lineBreakMode];
    CGRect newFrame = self.frame;
    newFrame.size.height = expectedLabelSize.height;
    self.frame = newFrame;
}

@end
6
bbrame

Vous pouvez implémenter la méthode TableViewController's(UITableViewCell *)tableView:cellForRowAtIndexPath de la manière suivante (par exemple):

#define CELL_LABEL_TAG 1

- (UITableViewCell *)tableView:(UITableView *)tableView  cellForRowAtIndexPath:(NSIndexPath *)indexPath {
    NSString *text = @"my long text";

    static NSString *MyIdentifier = @"MyIdentifier";
    UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
    if (cell == nil) {
        cell = [[[UITableViewCell alloc] initWithFrame:CGRectZero  reuseIdentifier:identifier] autorelease];
    }

    CGFloat width = [UIScreen mainScreen].bounds.size.width - 50;
    CGFloat height = [self textHeight:text] + 10;
    CGRect frame = CGRectMake(10.0f, 10.0f, width, height);

    UILabel *cellLabel = [[UILabel alloc] initWithFrame:frame];
    cellLabel.tag = CELL_LABEL_TAG;
    cellLabel.textColor = [UIColor blackColor];
    cellLabel.backgroundColor = [UIColor clearColor];
    cellLabel.textAlignment = UITextAlignmentLeft;
    cellLabel.font = [UIFont systemFontOfSize:12.0f];
    [cell.contentView addSubview:cellLabel];
    [cellLabel release];

    return cell;
}

UILabel *label = (UILabel *)[cell viewWithTag:CELL_LABEL_TAG];
label.text = text;
label.numberOfLines = 0;
[label sizeToFit];
return cell;

Utilisez également la méthode sizeWithFont:constrainedToSize:lineBreakMode: de NSString pour calculer la hauteur du texte.

6
iphonenoob

Et pour ceux qui migrent vers iOS 8, voici une extension de classe pour Swift:

extension UILabel {

    func autoresize() {
        if let textNSString: NSString = self.text {
            let rect = textNSString.boundingRectWithSize(CGSizeMake(self.frame.size.width, CGFloat.max),
                options: NSStringDrawingOptions.UsesLineFragmentOrigin,
                attributes: [NSFontAttributeName: self.font],
                context: nil)
            self.frame = CGRectMake(self.frame.Origin.x, self.frame.Origin.y, self.frame.size.width, rect.height)
        }
    }

}
4
Paul Ardeleanu

Extension UILabel basée sur cette réponse pour Swift 4 et supérieur

extension UILabel {

    func retrieveTextHeight () -> CGFloat {
        let attributedText = NSAttributedString(string: self.text!, attributes: [NSFontAttributeName:self.font])

        let rect = attributedText.boundingRect(with: CGSize(width: self.frame.size.width, height: CGFloat.greatestFiniteMagnitude), options: .usesLineFragmentOrigin, context: nil)

        return ceil(rect.size.height)
    }

}

Peut être utilisé comme:

self.labelHeightConstraint.constant = self.label.retrieveTextHeight()
4
Maverick

La méthode la plus simple et la plus efficace pour moi consistait à appliquer une contrainte de hauteur pour étiqueter et définir le paramètre priorité sur faible, c’est-à-dire (250) dans le scénarimage.

Vous n'avez donc pas à vous soucier de calculer la hauteur et la largeur par programmation, grâce au storyboard.

4
Akshay K

Mon approche pour calculer la hauteur dynamique de UILabel.

    let width = ... //< width of this label 
    let text = ... //< display content

    label.numberOfLines = 0
    label.lineBreakMode = .byWordWrapping
    label.preferredMaxLayoutWidth = width

    // Font of this label.
    //label.font = UIFont.systemFont(ofSize: 17.0)
    // Compute intrinsicContentSize based on font, and preferredMaxLayoutWidth
    label.invalidateIntrinsicContentSize() 
    // Destination height
    let height = label.intrinsicContentSize.height

Envelopper pour fonctionner:

func computeHeight(text: String, width: CGFloat) -> CGFloat {
    // A dummy label in order to compute dynamic height.
    let label = UILabel()

    label.numberOfLines = 0
    label.lineBreakMode = .byWordWrapping
    label.font = UIFont.systemFont(ofSize: 17.0)

    label.preferredMaxLayoutWidth = width
    label.text = text
    label.invalidateIntrinsicContentSize()

    let height = label.intrinsicContentSize.height
    return height
}
3
AechoLiu

Méthode mise à jour

+ (CGFloat)heightForText:(NSString*)text font:(UIFont*)font withinWidth:(CGFloat)width {

    CGSize constraint = CGSizeMake(width, 20000.0f);
    CGSize size;

    CGSize boundingBox = [text boundingRectWithSize:constraint
                                                  options:NSStringDrawingUsesLineFragmentOrigin
                                               attributes:@{NSFontAttributeName:font}
                                                  context:nil].size;

    size = CGSizeMake(ceil(boundingBox.width), ceil(boundingBox.height));

    return size.height;
}
3
Sandeep Singh

Vous pouvez aussi l'utiliser comme méthode. @Pyjamasam est très vrai donc je fais juste sa méthode. Cela peut être utile pour quelqu'un d'autre

-(CGRect)setDynamicHeightForLabel:(UILabel*)_lbl andMaxWidth:(float)_width{
    CGSize maximumLabelSize = CGSizeMake(_width, FLT_MAX);

    CGSize expectedLabelSize = [_lbl.text sizeWithFont:_lbl.font constrainedToSize:maximumLabelSize lineBreakMode:_lbl.lineBreakMode];

    //adjust the label the the new height.
    CGRect newFrame = _lbl.frame;
    newFrame.size.height = expectedLabelSize.height;
    return newFrame;
}

et juste le mettre comme ça

label.frame = [self setDynamicHeightForLabel:label andMaxWidth:300.0];
2
Mashhadi

Ceci est une ligne de code pour obtenir la hauteur UILabel en utilisant Objective-c:

labelObj.numberOfLines = 0;
CGSize neededSize = [labelObj sizeThatFits:CGSizeMake(screenWidth, CGFLOAT_MAX)];

et en utilisant .height vous obtiendrez la hauteur de l’étiquette comme suit:

neededSize.height
2
Sagar Sukode
UILabel *itemTitle = [[UILabel alloc] initWithFrame:CGRectMake(10.0f, 10,100, 200.0f)];
itemTitle.text = @"aseruy56uiytitfesh";
itemTitle.adjustsFontSizeToFitWidth = NO;
itemTitle.autoresizingMask = UIViewAutoresizingFlexibleWidth;
itemTitle.font = [UIFont boldSystemFontOfSize:18.0];
itemTitle.textColor = [UIColor blackColor];
itemTitle.shadowColor = [UIColor whiteColor];
itemTitle.shadowOffset = CGSizeMake(0, 1);
itemTitle.backgroundColor = [UIColor blueColor];
itemTitle.lineBreakMode = UILineBreakModeWordWrap;
itemTitle.numberOfLines = 0;
[itemTitle sizeToFit];
[self.view addSubview:itemTitle];

utilisez ceci ici toutes les propriétés sont utilisées sur l'étiquette et testez-la en augmentant le texte dans itemTitle.text comme

itemTitle.text = @"diofgorigjveghnhkvjteinughntivugenvitugnvkejrfgnvkhv";

il montrera la réponse que vous avez besoin

2
ashokdy

Merci pour ce post. Cela m'a beaucoup aidé. Dans mon cas, je modifie également le texte dans un contrôleur de vue séparé. J'ai remarqué que lorsque j'utilise:

[cell.contentView addSubview:cellLabel];

dans la table tableView: cellForRowAtIndexPath: méthode que la vue d'étiquette a été restituée en permanence au-dessus de la vue précédente chaque fois que j'ai édité la cellule. Le texte est devenu pixellisé et, lorsque quelque chose était supprimé ou modifié, la version précédente était visible sous la nouvelle version. Voici comment j'ai résolu le problème:

if ([[cell.contentView subviews] count] > 0) {
    UIView *test = [[cell.contentView subviews] objectAtIndex:0];
    [test removeFromSuperview];
}
[cell.contentView insertSubview:cellLabel atIndex:0];

Plus de superposition bizarre. S'il y a une meilleure façon de gérer cela, s'il vous plaît faites le moi savoir.

2
Tim Stephenson

Pour faire cela dans Swift3, voici le code:

 let labelSizeWithFixedWith = CGSize(width: 300, height: CGFloat.greatestFiniteMagnitude)
            let exactLabelsize = self.label.sizeThatFits(labelSizeWithFixedWith)
            self.label.frame = CGRect(Origin: CGPoint(x: 20, y: 20), size: exactLabelsize)
2
Baxter

Vous pouvez obtenir la hauteur en utilisant le code ci-dessous

Tu dois passer

  1. texte 2. police 3. largeur de l'étiquette

    func heightForLabel(text: String, font: UIFont, width: CGFloat) -> CGFloat {
    
    let label:UILabel = UILabel(frame: CGRect(x: 0, y: 0, width: width, height: CGFloat.greatestFiniteMagnitude))
    label.numberOfLines = 0
    label.lineBreakMode = NSLineBreakMode.byWordWrapping
    label.font = font
    label.text = text
    label.sizeToFit()
    
    return label.frame.height
    }
    
2
Rohit Makwana

Swift 2:

    yourLabel.text = "your very long text"
    yourLabel.numberOfLines = 0
    yourLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping
    yourLabel.frame.size.width = 200
    yourLabel.frame.size.height = CGFloat(MAXFLOAT)
    yourLabel.sizeToFit()

Les lignes intéressantes sont sizeToFit() conjointement avec le réglage d'un frame.size.height sur le flottant maximal, cela laissera de la place pour un texte long, mais sizeToFit() le forcera à n'utiliser que le nécessaire, mais - TOUJOURS appelez-le après avoir réglé le .frame.size.height.

Je recommande de définir un .backgroundColor à des fins de débogage, afin que vous puissiez voir le rendu de l'image pour chaque cas.

2
Juan Boero

Cette méthode donnera une hauteur parfaite

-(float) getHeightForText:(NSString*) text withFont:(UIFont*) font andWidth:(float) width{
CGSize constraint = CGSizeMake(width , 20000.0f);
CGSize title_size;
float totalHeight;


title_size = [text boundingRectWithSize:constraint
                                options:NSStringDrawingUsesLineFragmentOrigin
                             attributes:@{ NSFontAttributeName : font }
                                context:nil].size;

totalHeight = ceil(title_size.height);

CGFloat height = MAX(totalHeight, 40.0f);
return height;
}
1
-(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
{
    cellIdentifier = @"myCell";
    cell = [tableView dequeueReusableCellWithIdentifier:cellIdentifier];
    cell.myUILabel.lineBreakMode = UILineBreakModeWordWrap;        
    cell.myUILabel.numberOfLines = 0;
    cell.myUILabel.text = @"Some very very very very long text....."
    [cell.myUILabel.criterionDescriptionLabel sizeToFit];    
}

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath
{
    UITableViewCell *cell = [self tableView:tableView cellForRowAtIndexPath:indexPath];
    CGFloat rowHeight = cell.myUILabel.frame.size.height + 10;

    return rowHeight;    
}
1
Frank Fu
NSString *str = @"Please enter your text......";
CGSize lblSize = [str sizeWithFont:[UIFont systemFontOfSize:15] constrainedToSize: CGSizeMake(200.0f, 600.0f) lineBreakMode: NSLineBreakByWordWrapping];

UILabel *label = [[UILabel alloc]init];
label.frame = CGRectMake(60, 20, 200, lblSize.height);
label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByWordWrapping;
label.font = [UIFont systemFontOfSize:15];
label.text = str;
label.backgroundColor = [UIColor clearColor];
[label sizeToFit];
[self.view addSubview:label];
1
Gaurav Gilani
myLabel.text = "your very long text"
myLabel.numberOfLines = 0
myLabel.lineBreakMode = NSLineBreakMode.ByWordWrapping

Veuillez définir les contraintes pour UILabel dans le storyboard, y compris en haut à gauche en bas à droite

1
Ankit garg

Mon code:

UILabel *label      = [[UILabel alloc] init];
label.numberOfLines = 0;
label.lineBreakMode = NSLineBreakByWordWrapping;
label.text          = text;
label.textAlignment = NSTextAlignmentCenter;
label.font          = [UIFont fontWithName:_bodyTextFontFamily size:_bodyFontSize];

CGSize size = [label sizeThatFits:CGSizeMake(width, MAXFLOAT)];


float height        = size.height;
label.frame         = CGRectMake(x, y, width, height);
1
PhuocLuong

Ajoutant aux réponses ci-dessus:

Ceci peut être facilement réalisé via le scénarimage.

  1. Définir la contrainte pour UILabel. (Dans mon cas, je l'ai fait en haut, à gauche et à largeur fixe)
  2. Définir le nombre de lignes sur 0 dans l'inspecteur d'attributs
  3. Définissez le saut de ligne sur WordWrap dans l'inspecteur d'attributs.

UILabel Height Adjust

1
chetan

Enfin, cela a fonctionné. Merci les gars.

Je n'arrivais pas à le faire fonctionner parce que j'essayais de redimensionner l'étiquette avec la méthode heightForRowAtIndexPath:

- (CGFloat)tableView:(UITableView *)tableView heightForRowAtIndexPath:(NSIndexPath *)indexPath

et (ouais silly-moi), je redimensionnais l'étiquette par défaut dans la méthode cellForRowAtIndexPath - j'ignorais le code que j'avais écrit précédemment:

- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath
1
Mustafa

Une ligne est que la réponse de Chris est fausse.

newFrame.size.height = maximumLabelSize.height;

devrait être

newFrame.size.height = expectedLabelSize.height;

Autre que cela, c'est la bonne solution.

1
David Weiss

Le problème est qu'aucune des fonctions mentionnées n'est réalisable et pour certaines chaînes et polices, la valeur de hauteur sera incorrecte. Surtout va échouer pour les textes attribués.

La seule solution valable est la suivante: https://stackoverflow.com/a/4214978/699944 et le point est d'utiliser CoreText pour calculer manuellement la hauteur de chaque ligne afin d'obtenir la taille correcte. Il n'y a pas d'autre moyen connu de le faire.

0
Marcin

Cette méthode fonctionnera pour iOS 6 et 7

- (float)heightForLabelSize:(CGSize)maximumLabelSize  Font:(UIFont *)font String:(NSString*)string {

if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 7) {
    NSDictionary *stringAttributes = [NSDictionary dictionaryWithObject:font forKey: NSFontAttributeName];

    CGSize adjustedLabelSize = [string maximumLabelSize
                                                                  options:NSStringDrawingTruncatesLastVisibleLine|NSStringDrawingUsesLineFragmentOrigin
                                                               attributes:stringAttributes context:nil].size;
    return adjustedLabelSize.height;
}
else {
    CGSize adjustedLabelSize = [string sizeWithFont:font constrainedToSize:maximumLabelSize lineBreakMode:NSLineBreakByWordWrapping];

    return adjustedLabelSize.height;
}

}
0
Spinoxa