iOS學習:UILabel和sizeWithFont方法,可用於動態調整UILabel大小

轉自:http://www.cnblogs.com/zouzf/archive/2012/11/21/2780040.htmlhtml


- (void)viewDidLoad
{
    [super viewDidLoad];
    // Do any additional setup after loading the view, typically from a nib.
    
    NSString *text = @"tw ia nwifei xantianwif eixan tianwi feixan";
    
    //設置字體,包括字體及其大小
    UIFont *font = [UIFont fontWithName:@"Arial" size:50.0f];
    
    //label可設置的最大高度和寬度
    CGSize maxSize = CGSizeMake(320.f, MAXFLOAT);
    
    //字符串在指定區域內按照指定的字體顯示時,須要的高度和寬度(寬度在字符串只有一行時有用)
    //通常用法:指定區域的寬度而高度用MAXFLOAT,則返回值包含對應的高度
    //若是指定區域的寬度指定,而字符串要顯示的區域的高度超過了指定區域的高度,則高度返回0
    //核心:多行顯示,指定寬度,獲取高度
    CGSize labelSize = [text sizeWithFont:font
                         constrainedToSize:CGSizeMake(320.f, MAXFLOAT)
                             lineBreakMode:NSLineBreakByWordWrapping];

    //指定用於顯示的區域
    CGRect rect = CGRectMake(0.0f, 0.0f, labelSize.width, labelSize.height);
    
    //CGRectZero表示(0,0,0,0),即留待後面再設置
    UILabel *myLabel = [[UILabel alloc] initWithFrame:CGRectZero];
    
    //label默認只顯示一行,把numberofline設爲0,即表示不限制行數,根據實際顯示
    [myLabel setNumberOfLines:0];
    
    myLabel.frame = rect;
    myLabel.text = text;
    myLabel.font = font;
    myLabel.textColor = [UIColor grayColor];
    
    //把label加入到view裏,這樣才能顯示
    [self.view addSubview:myLabel];
    
    //引用計數減一,由於在上一行 addSubview 時,view已經把mylabel的引用計數加一了
    [myLabel release];
    
}

-(void)test
{
    NSString *text = @"asfawlfaw;lojf";
    UIFont *font = [UIFont fontWithName:@"Arial" size:20.0f];
    
    //字符串在指定區域內按照指定的字體顯示時,須要的高度和寬度(寬度在字符串只有一行時有用)
    //通常用法:指定區域的寬度而高度用MAXFLOAT,則返回值包含對應的高度
    //若是指定區域的寬度指定,而字符串要顯示的區域的高度超過了指定區域的高度,則高度返回0
    //核心:多行顯示,指定寬度,獲取高度
    CGSize labelSize = [text sizeWithFont:font
                        constrainedToSize:CGSizeMake(320.f, MAXFLOAT)
                            lineBreakMode:NSLineBreakByWordWrapping];
    
    //字符串用指定字體進行單行顯示時,須要的高度和寬度
    CGSize size1 = [text sizeWithFont:font];
    
    //字符串用指定字體在指定區域進行單行顯示時,須要的高度和寬度;
    //通常的用法是,指定區域的高度固定而寬度用MAXFLOAT,則返回值包含對應的寬度
    //若是指定區域的寬度不夠,則寬度返回0;高度不夠則沒影響
    //核心:單行顯示,指定區域的寬度要夠大,獲取寬度
    CGSize size2 = [text sizeWithFont:font
                    constrainedToSize:CGSizeMake(MAXFLOAT, 100.0f)];
    
    
    //字符串用指定字體指定寬度和指定換行方式顯示時,須要的高度和寬度
    //雖然指定了換行方式,在實際計算時也會換行,但返回結果只會返回第一行的高度和寬度
    //若是指定寬度小於字符串寬度,則寬度返回0
    //核心:貌似沒有什麼用
    CGSize size3 = [text sizeWithFont:font
                             forWidth:400.0f
                        lineBreakMode:NSLineBreakByWordWrapping];
    
    CGFloat f = 0.0f;
    
    //雖然指定了換行方式,在實際計算時也會換行,但返回的結果只是第一行的高度很寬度
    //指定了應該顯示的字體,最小的字體,實際的字體,在實際計算中,若是寬度不夠,則儘可能縮小字符串的字體直至可以一行所有顯示,若是縮到最小還不能徹底顯示字符串,則進行截斷,返回截斷後的字符串的高度和寬度
    //字體實際的大小,存放在 actualFontSize裏
    CGSize size4 = [text sizeWithFont:font
                          minFontSize:10.0f
                       actualFontSize:&f
                             forWidth:100.0f
                        lineBreakMode:NSLineBreakByWordWrapping];

}
相關文章
相關標籤/搜索