145 votes

Remplacement déprécié -sizeWithFont:constrainedToSize:lineBreakMode: dans iOS 7?

Dans iOS 7, la méthode:

- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size lineBreakMode:(NSLineBreakMode)lineBreakMode 

et la méthode:

- (CGSize)sizeWithFont:(UIFont *)font

sont déconseillés. Comment puis-je le remplacer

CGSize size = [string sizeWithFont:font constrainedToSize:constrainSize lineBreakMode:NSLineBreakByWordWrapping];

et:

CGSize size = [string sizeWithFont:font];

219voto

Xavier Maroñas Points 1146

Vous pouvez essayer ceci:

CGRect textRect = [text boundingRectWithSize:size
                                 options:NSStringDrawingUsesLineFragmentOrigin
                              attributes:@{NSFontAttributeName:FONT}
                                 context:nil];

CGSize size = textRect.size;

Il suffit de changer "POLICE" pour un "[UIFont de police....]"

36voto

Nirav Points 2593

Comme nous ne pouvons pas utiliser sizeWithAttributes pour tous les iOS de plus de 4.3 nous avons à écrire de code conditionnel pour la version 7.0 et précédente iOS.

1) Solution 1:

if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
   CGSize size = CGSizeMake(230,9999);
   CGRect textRect = [specialityObj.name  
       boundingRectWithSize:size
                    options:NSStringDrawingUsesLineFragmentOrigin
                 attributes:@{NSFontAttributeName:[UIFont fontWithName:[AppHandlers zHandler].fontName size:14]}
                    context:nil];
   total_height = total_height + textRect.size.height;   
}
else {
   CGSize maximumLabelSize = CGSizeMake(230,9999); 
   expectedLabelSize = [specialityObj.name sizeWithFont:[UIFont fontWithName:[AppHandlers zHandler].fontName size:14] constrainedToSize:maximumLabelSize lineBreakMode:UILineBreakModeWordWrap]; //iOS 6 and previous. 
   total_height = total_height + expectedLabelSize.height;
}

2) la Solution 2

UILabel *gettingSizeLabel = [[UILabel alloc] init];
gettingSizeLabel.font = [UIFont fontWithName:[AppHandlers zHandler].fontName size:16]; // Your Font-style whatever you want to use.
gettingSizeLabel.text = @"YOUR TEXT HERE";
gettingSizeLabel.numberOfLines = 0;
CGSize maximumLabelSize = CGSizeMake(310, 9999); // this width will be as per your requirement

CGSize expectedSize = [gettingSizeLabel sizeThatFits:maximumLabelSize];

La première solution est parfois ne parviennent pas à revenir valeur correcte de hauteur. donc utiliser une autre solution. qui fonctionne parfaitement.

La deuxième option est très bien et en douceur, dans tous les iOS sans code conditionnel.

9voto

Prince Points 16165

Voici la solution la plus simple :

Exigences :

CGSize maximumSize = CGSizeMake(widthHere, MAXFLOAT);
UIFont *font = [UIFont systemFontOfSize:sizeHere];

Maintenant Que constrainedToSizeusage:lineBreakMode: d'utilisation est déconseillée dans iOS 7.0:

CGSize expectedSize = [stringHere sizeWithFont:font constrainedToSize:maximumSize lineBreakMode:NSLineBreakByWordWrapping];

Maintenant, l'utilisation dans une plus grande version de l' iOS 7.0 sera:

// Let's make an NSAttributedString first
NSMutableAttributedString *attributedString = [[NSMutableAttributedString alloc] initWithString:stringHere];
//Add LineBreakMode
NSMutableParagraphStyle *paragraphStyle = [NSMutableParagraphStyle new];
[paragraphStyle setLineBreakMode:NSLineBreakByWordWrapping];
[attributedString setAttributes:@{NSParagraphStyleAttributeName:paragraphStyle} range:NSMakeRange(0, attributedString.length)];
// Add Font
[attributedString setAttributes:@{NSFontAttributeName:font} range:NSMakeRange(0, attributedString.length)];

//Now let's make the Bounding Rect
CGSize expectedSize = [attributedString boundingRectWithSize:maximumSize options:NSStringDrawingUsesLineFragmentOrigin context:nil].size;

6voto

roberto.buratti Points 1058

Dans la plupart des cas, j'ai utilisé la méthode sizeWithFont:constrainedToSize:lineBreakMode: pour estimer la taille minimale d'un UILabel pour accueillir ses textes (en particulier lorsque l'étiquette doit être placée à l'intérieur d'un UITableViewCell)...

...Si c'est exactement votre situation, vous pouvez simpy l'utilisation de la méthode:

CGSize size = [myLabel textRectForBounds:myLabel.frame limitedToNumberOfLines:mylabel.numberOfLines].size;

Espérons que cela pourrait les aider.

3voto

user3575114 Points 31
UIFont *font = [UIFont boldSystemFontOfSize:16];
CGRect new = [string boundingRectWithSize:CGSizeMake(200, 300) options:NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName: font} context:nil];
CGSize stringSize= new.size;

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X