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


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

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

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

按 Ctrl+C 復制代碼

//
// 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

按 Ctrl+C 復制代碼

現在來測試代碼:

效果圖如下:

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

顯示結果:

無論自定義字體還是系統字體都是可以完美使用的.

 

以下代碼供你測試:

復制代碼
    // 字符串
    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 = [[NSAttributedStringallocinitWithString:aString];

    

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

    

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

    

    size = [aString boundingRectWithSize:CGSizeMake(237200)  options:NSStringDrawingUsesLineFragmentOriginattributes:diccontext:nil].size;

    

    return  size;

    

}

 

 

//  獲取字符串的大小  ios6

- (CGSize)getStringRect_:(NSString*)aString

{

    CGSize size;

    

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

    size=[aString sizeWithFont:nameFont constrainedToSize:CGSizeMake(237200lineBreakMode:NSLineBreakByCharWrapping];

    return  size;

}

 轉載自:http://www.cnblogs.com/YouXianMing/p/3706269.html


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM