您的位置:首页 > 产品设计 > UI/UE

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

2014-08-23 09:42 393 查看
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 = [[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;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: