iOS开发之自定义段落时求文字高度

//

//  NSString+Extend.h

//  FoodWorld

//

//  Created by lys on 16/2/11.

//  Copyright © 2016年 imac. All rights reserved.

//

 

#import <Foundation/Foundation.h>

#import <UIKit/UIKit.h>

 

@interface NSString (Extend)

 

/**

 * 求单行字的宽度

 */

- (CGFloat)getTextWightWithFont:(UIFont *)font;

 

/**

 * 求单行字的Size

 */

- (CGSize)getTextSizeWithFont:(UIFont *)font;

 

/**

 * 求多行字在指定宽度下的高度

 */

- (CGFloat)getTextHeightWithFont:(UIFont *)font withWidth:(CGFloat)width;

 

/**

 * 求多行字在指定宽度下的高度 可以自定义段落

 */

- (CGFloat)getTextHeightWithFont:(UIFont *)font withWidth:(CGFloat)width withParagraphStyle:(NSParagraphStyle *)paragraphStyle;

 

@end

 

//

//  NSString+Extend.m

//  FoodWorld

//

//  Created by lys on 16/2/11.

//  Copyright © 2016年 imac. All rights reserved.

//

 

#import "NSString+Extend.h"

 

@implementation NSString (Extend)

 

/**

 * 求单行字的宽度

 */

- (CGFloat)getTextWightWithFont:(UIFont *)font {

    CGRect rect = [self boundingRectWithSize:CGSizeMake(1000, 1000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil];

    return rect.size.width;

}

 

/**

 * 求单行字的Size

 */

- (CGSize)getTextSizeWithFont:(UIFont *)font {

    CGRect rect = [self boundingRectWithSize:CGSizeMake(1000, 1000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil];

    return rect.size;

}

 

/**

 * 求多行字在指定宽度下的高度

 */

- (CGFloat)getTextHeightWithFont:(UIFont *)font withWidth:(CGFloat)width {

//    CGRect rect = [self boundingRectWithSize:CGSizeMake(width, 10000) options:NSStringDrawingUsesLineFragmentOrigin attributes:@{NSFontAttributeName:font} context:nil];

    

    NSMutableParagraphStyle *paragraphStyle = [[NSMutableParagraphStyle alloc]init];

    paragraphStyle.lineBreakMode = NSLineBreakByWordWrapping;

    NSDictionary *attributes = @{NSFontAttributeName:font,

                       NSParagraphStyleAttributeName:paragraphStyle.copy};

    

    CGRect rect = [self boundingRectWithSize:CGSizeMake(width, 10000) options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil];

    /*

     This method returns fractional sizes (in the size component of the returned CGRect); to use a returned size to size views, you must use raise its value to the nearest higher integer using the ceil function.

     */

    return rect.size.height;

}

 

/**

 * 求多行字在指定宽度下的高度 可以自定义段落

 */

- (CGFloat)getTextHeightWithFont:(UIFont *)font withWidth:(CGFloat)width withParagraphStyle:(NSParagraphStyle *)paragraphStyle{

    

    if (paragraphStyle == nil) {

        NSMutableParagraphStyle *tparagraphStyle = [[NSMutableParagraphStyle alloc]init];

        tparagraphStyle.lineBreakMode = NSLineBreakByWordWrapping;

        paragraphStyle = tparagraphStyle;

    }

    

    NSDictionary *attributes = @{NSFontAttributeName:font,

                                 NSParagraphStyleAttributeName:paragraphStyle.copy};

    

    CGRect rect = [self boundingRectWithSize:CGSizeMake(width, 10000) options:NSStringDrawingUsesLineFragmentOrigin attributes:attributes context:nil];

 

    return rect.size.height;

}

posted on 2016-07-19 13:41  程序“猿”  阅读(545)  评论(0)    收藏  举报

导航