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
//
// 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
現在來測試代碼:
效果圖如下:
我們來試驗一下使用自定義字體測試一回:
顯示結果:
無論自定義字體還是系統字體都是可以完美使用的.
以下代碼供你測試:
// 字符串 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, 200) 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(237, 200) lineBreakMode:NSLineBreakByCharWrapping];
return size;
}
轉載自:http://www.cnblogs.com/YouXianMing/p/3706269.html