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, 200) options: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;
}