2013-09-25 4 views
4

Метод (sizeWithFont: forWidth: lineBreakMode:) был устаревшим в iOS 7.0.NSString sizeWithFont: альтернатива в iOS7

Но как я могу сделать то же самое, что и следующий код в iOS 7.0?

CGSize fontSize =[self.text sizeWithFont:self.font forWidth:self.frame.size.width lineBreakMode:NSLineBreakByTruncatingTail]; 

(boundingRectWithSize:options:attributes:context:) сделать это? Я не уверен, но это метод, который я искал в документе Apple.

Благодарим за помощь.

+0

Если вы все еще поддерживаете iOS6 и не пользуетесь никакими новыми функциями рендеринга, все равно использовать устаревший метод. Если вы поддерживаете только iOS7, 'boundingRectWithSize: options: attributes: context:' - правильный метод для использования. –

ответ

15

Я получил категорию NSString, чтобы получить ширину или высоту системы строки:

- (CGFloat)widthWithFont:(UIFont *)font 
{ 
    NSDictionary *attributes = [NSDictionary dictionaryWithObjectsAndKeys:font, NSFontAttributeName, nil]; 
    return [[[NSAttributedString alloc] initWithString:self attributes:attributes] size].width; 
} 

- (CGFloat)heigthWithWidth:(CGFloat)width andFont:(UIFont *)font 
{ 
    NSMutableAttributedString *attrStr = [[NSMutableAttributedString alloc] initWithString:self]; 
    [attrStr addAttribute:NSFontAttributeName value:font range:NSMakeRange(0, [self length])]; 
    CGRect rect = [attrStr boundingRectWithSize:CGSizeMake(width, CGFLOAT_MAX) options:NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context:nil]; 
    return rect.size.height; 
} 
+0

Это замечательно, просто небольшая ошибка в heigthWithWidth, лучше удалить фиксированную ширину в параметре boundingRectWithSize для ширины :) CGRect rect = [attrStr boundingRectWithSize: CGSizeMake (ширина, CGFLOAT_MAX) опции: NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading context: nil]; – xarly

+0

thx, вы правы! Я отредактирую свой ответ. – matthias

0

Для тех, кто хочет высоту с шириной функцией, но в скор ее:

func HeigthWithWidth(stringToSize : String, width : CGFloat, font : UIFont) -> CGFloat { 
    var attrStr = NSMutableAttributedString(string: stringToSize); 
    attrStr.addAttribute(NSFontAttributeName, value: font, range: NSRange.init(location: 0, length: stringToSize.characters.count)); 
    var rect = attrStr.boundingRectWithSize(CGSize(width: width, height: CGFloat.max), options: [NSStringDrawingOptions.UsesLineFragmentOrigin, NSStringDrawingOptions.UsesFontLeading], context: nil); 
    return rect.size.height; 
} 

Надежды что помогает тем, кто приходит позже.

Смежные вопросы