In iOS 7 ist die Methode:
- (CGSize)sizeWithFont:(UIFont *)font
constrainedToSize:(CGSize)size
lineBreakMode:(NSLineBreakMode)lineBreakMode
und die Methode:
- (CGSize)sizeWithFont:(UIFont *)font
sind veraltet. Wie kann ich ersetzen?
CGSize size = [string sizeWithFont:font
constrainedToSize:constrainSize
lineBreakMode:NSLineBreakByWordWrapping];
und:
CGSize size = [string sizeWithFont:font];
Sie könnten dies versuchen:
CGRect textRect = [text boundingRectWithSize:size
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName:FONT}
context:nil];
CGSize size = textRect.size;
Ändern Sie einfach "FONT" für eine "[UIFont-Schrift ....]"
Da wir sizeWithAttributes nicht für alle iOS größer als 4.3 verwenden können, müssen wir bedingten Code für 7.0 und das vorherige iOS schreiben.
1) Lösung 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) Lösung 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];
Die erste Lösung ist manchmal nicht in der Lage, den richtigen Wert für die Höhe zurückzugeben. Verwenden Sie also eine andere Lösung. das wird perfekt funktionieren.
Die zweite Option ist ziemlich gut und funktioniert reibungslos in allen iOS ohne bedingten Code.
Hier ist eine einfache Lösung:
Bedarf :
CGSize maximumSize = CGSizeMake(widthHere, MAXFLOAT);
UIFont *font = [UIFont systemFontOfSize:sizeHere];
Now As constrainedToSizeusage:lineBreakMode:
ist in iOS 7.0 veraltet.
CGSize expectedSize = [stringHere sizeWithFont:font constrainedToSize:maximumSize lineBreakMode:NSLineBreakByWordWrapping];
Die Verwendung in grösser Version von iOS 7.0 ist nun:
// 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;
Im Folgenden finden Sie zwei einfache Methoden, die diese beiden veralteten Methoden ersetzen.
Und hier sind die relevanten Referenzen:
Wenn Sie NSLineBreakByWordWrapping verwenden, müssen Sie den NSParagraphStyle nicht angeben, da dies die Standardeinstellung ist: https://developer.Apple.com/library/mac/documentation/Cocoa/Reference/ApplicationKit/Classes /NSParagraphStyle_Class/index.html#//Apple_ref/occ/clm/NSParagraphStyle/defaultParagraphStyle
Sie müssen die Obergrenze der Größe ermitteln, um mit den Ergebnissen der veralteten Methoden übereinzustimmen https://developer.Apple.com/library/ios/documentation/UIKit/Reference/NSString_UIKit_Additions/#//Apple_ref/occ/instm/NSString/boundingRectWithSize: Optionen: Attribute: Kontext :
+ (CGSize)text:(NSString*)text sizeWithFont:(UIFont*)font {
CGSize size = [text sizeWithAttributes:@{NSFontAttributeName: font}];
return CGSizeMake(ceilf(size.width), ceilf(size.height));
}
+ (CGSize)text:(NSString*)text sizeWithFont:(UIFont*)font constrainedToSize:(CGSize)size{
CGRect textRect = [text boundingRectWithSize:size
options:NSStringDrawingUsesLineFragmentOrigin
attributes:@{NSFontAttributeName: font}
context:nil];
return CGSizeMake(ceilf(textRect.size.width), ceilf(textRect.size.height));
}
In den meisten Fällen habe ich die Methode sizeWithFont: constrainedToSize: lineBreakMode: verwendet, um die Mindestgröße für ein UILabel zu schätzen, um dessen Text aufzunehmen (insbesondere wenn das Label in einer UITableViewCell platziert werden muss).
Wenn dies genauIhre Situation ist, können Sie einfach die Methode verwenden:
CGSize size = [myLabel textRectForBounds:myLabel.frame limitedToNumberOfLines:mylabel.numberOfLines].size;
Hoffe das könnte helfen.
UIFont *font = [UIFont boldSystemFontOfSize:16];
CGRect new = [string boundingRectWithSize:CGSizeMake(200, 300) options:NSStringDrawingUsesFontLeading attributes:@{NSFontAttributeName: font} context:nil];
CGSize stringSize= new.size;
[Die akzeptierte Antwort funktioniert gut in einer Kategorie. Ich überschreibe die veralteten Methodennamen. Ist das eine gute Idee? Scheint in Xcode 6.x ohne Beanstandungen zu funktionieren]
Dies funktioniert, wenn Ihr Bereitstellungsziel 7.0 oder höher ist. Kategorie ist NSString (Util)
- (CGSize)sizeWithFont:(UIFont *) font;
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size;
- (CGSize)sizeWithFont:(UIFont *) font {
NSDictionary *fontAsAttributes = @{NSFontAttributeName:font};
return [self sizeWithAttributes:fontAsAttributes];
}
- (CGSize)sizeWithFont:(UIFont *)font constrainedToSize:(CGSize)size {
NSDictionary *fontAsAttributes = @{NSFontAttributeName:font};
CGRect retVal = [self boundingRectWithSize:size
options:NSStringDrawingUsesLineFragmentOrigin
attributes:fontAsAttributes context:nil];
return retVal.size;
}
UIFont *font = [UIFont fontWithName:@"Courier" size:16.0f];
NSMutableParagraphStyle *paragraphStyle = [[NSParagraphStyle defaultParagraphStyle] mutableCopy];
paragraphStyle.lineBreakMode = NSLineBreakByTruncatingTail;
paragraphStyle.alignment = NSTextAlignmentRight;
NSDictionary *attributes = @{ NSFontAttributeName: font,
NSParagraphStyleAttributeName: paragraphStyle };
CGRect textRect = [text boundingRectWithSize:size
options:NSStringDrawingUsesLineFragmentOrigin
attributes:attributes
context:nil];
CGSize size = textRect.size;