標籤:blog http color io os ar 使用 sp div
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
iOS7中計算UILabel中字串的高度