iOS中計算文本高度


    // 設置文本的換行寬度spa

    self.contentLabel.preferredMaxLayoutWidth = [UIScreen mainScreen].bounds.size.width - 16;3d




- (CGRect)boundingRectWithSize:(CGSize)size options:(NSStringDrawingOptions)options attributes:(NSDictionary *)attributes context:(NSStringDrawingContext *)context NS_AVAILABLE_IOS(7_0);  

size:限制尺寸,用於計算文本繪製時佔據的矩形塊,例如微博開發中size.w不超過scence.w。能夠將size.y設置爲無限大MAXFLOAT以便於顯示全部文字內容。  
option:文本繪製時的附加選項。  
有四種類型:
code

1.NSStringDrawingTruncatesLastVisibleLine orm

2.NSStringDrawingUsesLineFragmentOrigin  對象

3. NSStringDrawingUsesFontLeading  
4. NSStringDrawingUsesDeviceMetrics  
一般使用NSStringDrawingUsesLineFragmentOrigin,若是options參數爲NSStringDrawingUsesLineFragmentOrigin,那麼整個文本將以每行組成的矩形爲單位計算整個文本的尺寸。  
attributes:將文本UIFront存入字典傳到這裏。例如, NSDictionary *dict = @{NSFontAttributeName : font}  
context:context上下文。包括一些信息,例如如何調整字間距以及縮放。最終,該對象包含的信息將用於文本繪製。該參數可爲 nil 。
開發


#import "ViewController.h"

@interface ViewController ()

@end

@implementation ViewController

- (void)viewDidLoad {
    [super viewDidLoad];
    
    UILabel *label = [[UILabel alloc]init];
    [self.view addSubview:label];
    
    NSString *str = @"在採訪中他表示:「我想如今是年輕人的時間了,他們是時候上場去表現了。」他還表示,雖然表明本身國家打球很美好,可是他想穿着湖人隊球衣打完本身的最後一場比賽。常規賽戰績不佳,許多人建議科比去奧運會上帶領美國男籃,爲本身的職業生涯畫上一個完美的句點。有消息曾說科比考慮過出戰今年的奧運會,但科比今天給出的迴應是「NO」,在去年的11月30日科比宣佈退役以來,他的下一步舉動就被許多球迷關心。從2006年開始,科比第一次參加了美國國家隊,在2007年美州籃球錦標賽中,他幫助球隊在該項比賽中取得了10-0的成績,贏得了美錦賽的金牌並得到了2008年北京奧運會的參賽資格。";
    label.text = str;
    label.numberOfLines = 0;
    CGSize textSize = [self sizeWithString:label.text font:[UIFont systemFontOfSize:15] maxSize:CGSizeMake(200, MAXFLOAT)];
    label.frame = CGRectMake(20,20, textSize.width, textSize.height);

}


- (CGSize)sizeWithString:(NSString *)str font:(UIFont *)font maxSize:(CGSize)maxSize
{
    NSDictionary *dict = @{NSFontAttributeName : font};
    CGSize size =  [str boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil].size;
    return size;
}

@end


又如:it

//
//  NSString+Extension.h
#import <Foundation/Foundation.h>

@interface NSString (Extension)
- (CGSize)sizeWithFont:(UIFont *)font maxSize:(CGSize)maxSize;
@end


//
//  NSString+Extension.m
#import "NSString+Extension.h"

@implementation NSString (Extension)

- (CGSize)sizeWithFont:(UIFont *)font maxSize:(CGSize)maxSize
{
    NSDictionary *dict = @{NSFontAttributeName: font};
    CGSize textSize = [self boundingRectWithSize:maxSize options:NSStringDrawingUsesLineFragmentOrigin attributes:dict context:nil].size;
    return textSize;
}
@end
相關文章
相關標籤/搜索