iOS7中計算UILabel中字符串的高度

iOS7中計算UILabel中字符串的高度ios

iOS7中出現了新的方法計算UILabel中根據給定的Font以及str計算UILabel的frameSize的方法.本人提供category以下:app

UILabel+StringFrame.h測試

//
//  UILabel+StringFrame.h
//  LabelHeight
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import <UIKit/UIKit.h>

@interface UILabel (StringFrame)

- (CGSize)boundingRectWithSize:(CGSize)size;

@end

UILabel+StringFrame.m字體

//
//  UILabel+StringFrame.m
//  LabelHeight
//
//  Copyright (c) 2014年 Y.X. All rights reserved.
//

#import "UILabel+StringFrame.h"

@implementation UILabel (StringFrame)

- (CGSize)boundingRectWithSize:(CGSize)size
{
    NSDictionary *attribute = @{NSFontAttributeName: self.font};
    
    CGSize retSize = [self.text boundingRectWithSize:size
                                             options:\
                      NSStringDrawingTruncatesLastVisibleLine |
                      NSStringDrawingUsesLineFragmentOrigin |
                      NSStringDrawingUsesFontLeading
                                          attributes:attribute
                                             context:nil].size;
    
    return retSize;
}


@end

如今來測試代碼:spa

效果圖以下:3d

咱們來試驗一下使用自定義字體測試一回:code

顯示結果:orm

不管自定義字體仍是系統字體都是能夠完美使用的.blog

 

如下代碼供你測試:字符串

    // 字符串
    NSString *str = @"日落時分,沏上一杯山茶,聽一曲意境空遠的《禪》,心神隨此天籟,沉溺於玄妙的幻境裏。彷彿我就是那穿梭於葳蕤山林中的一隻飛鳥,時而盤旋穿梭,時而引吭高歌;彷彿我就是那潺潺流瀉于山澗的一汪清泉,漣漪輕盈,浩淼長流;彷彿我就是那竦峙在天地間的一座山巒,偉岸高聳,從容綿延。我不相信佛,只是喜歡玄冥空靈的梵音經貝,與慈悲淡然的佛境禪心,在清歡中,從容幽靜,自在安然。一直嚮往走進青的山,碧的水,體悟山水的絢麗多姿,領略草木的興衰榮枯,傾聽黃天厚土之聲,探尋宇宙天然的妙趣。走進了山水,也就走出了喧囂,給身心以清涼,給精神以沉澱,給靈魂以昇華。";
    
    // 初始化label
    UILabel *label = [UILabel new];
    label.backgroundColor = [UIColor whiteColor];
    [self.view addSubview:label];
    
    // label獲取字符串
    label.text = str;
    

    // label獲取字體
    label.font = [UIFont fontWithName:nil size:18];
    
    // 根據獲取到的字符串以及字體計算label須要的size
    CGSize size = [label boundingRectWithSize:CGSizeMake(320, 0)];
    
    // 設置無限換行
    label.numberOfLines = 0;
    
    // 設置label的frame
    label.frame = CGRectMake(0.0f, 50.0f, size.width, size.height);

 

 

iOS6能夠使用以下方式來獲取字符串的size值

        size = [text sizeWithFont:font
                  constrainedToSize:size
                       lineBreakMode:NSLineBreakByCharWrapping];

 但此方法已經在iOS7中被廢棄了,注意.

 

 

 

//  獲取字符串的大小  ios7

 

- (CGSize)getStringRect:(NSString*)aString

{

    CGSize size;

    

    NSAttributedString* atrString = [[NSAttributedStringalloc] initWithString:aString];

    

    NSRange range = NSMakeRange(0, atrString.length);

    

    NSDictionary* dic = [atrString attributesAtIndex:0 effectiveRange:&range];

    

    size = [aString boundingRectWithSize:CGSizeMake(237, 200options:NSStringDrawingUsesLineFragmentOriginattributes:dic context:nil].size;

    

    return  size;

    

}

 

 

//  獲取字符串的大小  ios6

- (CGSize)getStringRect_:(NSString*)aString

{

    CGSize size;

    

    UIFont *nameFont=[UIFont fontWithName:@"Helvetica" size:13];

    size=[aString sizeWithFont:nameFont constrainedToSize:CGSizeMake(237, 200) lineBreakMode:NSLineBreakByCharWrapping];

    return  size;

}

相關文章
相關標籤/搜索