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中字符串的高度的更多相关文章

  1. vue中计算属性中的set和get

    <script src="https://cdn.jsdelivr.net/npm/vue/dist/vue.js"></script> <body& ...

  2. NSString -- UILabel中字体有多种颜色,字符串自动计算高度/换行

    一:UILabel中字体有多种颜色 UILabel *label = [[UILabel alloc] init]; label.frame = CGRectMake(, , , ); label.b ...

  3. PHP中计算字符串相似度的函数代码

    similar_text — 计算两个字符串的相似度 int similar_text ( string $first , string $second [, float &$percent ...

  4. php如何利用标准输入输出实现在一个字符串中计算某个字符出现的个数?

    php如何利用标准输入输出实现在一个字符串中计算某个字符出现的个数? 一.总结 php实现计算字符个数(php标准输入和输出:fgets(STDIN)  echo $output;) 1.php标准输 ...

  5. 7-19 计算有n个字符串中最长的字符串长度 (40 分)

    编写程序,用于计算有n(1<n<10)个字符串中最长的字符串的长度.前导空格不要计算在内! 输入格式: 在第一行中输入n,接下的每行输入一个字符串 输出格式: 在一行中输出最长的字符串的长 ...

  6. 1014-34-首页15-计算原创微博的frame------计算cell的高度---计算 UILabel 的 CGSize 的方法

    一.总体思路: 在控制器中,每次拿到数据模型(请求了数据.加载新微博)的时候,就调用 - (NSArray *)stausFramesWithStatuses:(NSArray *)statuses, ...

  7. ios 根据文字数量计算UILabel高度(已修改)

    由于留言的朋友给出了更好的方法,所以下面的代码都是它留言中给出的,优于我前面计算Lable高度方法,这个可以说非常的准,是IOS自带的计算UILABEL高度的方式. 一.实现代码 // 创建label ...

  8. 根据字符串计算UILabel尺寸

    iOS开发中经常会遇到UILabel大小尺寸不固定的情况,需要根据文字内容变化,这时候就需要计算文字大小以自动改变UILabel的尺寸. iOS7之后计算尺寸只需要一个方法就可以: - (CGSize ...

  9. 在Windows cmd中计算行数

    本文主体来自这篇外文文章的翻译.原文中有一个副标题:"如何简单地用Windows自带的FIND在CMD.exe中计算行数" 当我们在命令行环境中工作时,能计算其它工具输出内容的行数 ...

随机推荐

  1. Canu Parameter Reference(canu参数介绍)

    链接:Canu Parameter Reference To get the most up-to-date options, run canu -options The default values ...

  2. Python开发简单爬虫 - 慕课网

    课程链接:Python开发简单爬虫 环境搭建: Eclipse+PyDev配置搭建Python开发环境 Python入门基础教程 用Eclipse编写Python程序   课程目录 第1章 课程介绍 ...

  3. linux笔记:linux系统安装-vmware虚拟机安装

    vmware版本:vmware8(百度云里备份了安装程序VMware_Workstation_wmb.zip) vmware软件安装过程: 1.在百度云中下载安装程序压缩包VMware_Worksta ...

  4. Android利用V4包中的SwipeRefreshLayout实现上拉加载

    基本原理 上拉加载或者说滚动到底部时自动加载,都是通过判断是否滚动到了ListView或者其他View的底部,然后触发相应的操作,这里我们以 ListView来说明.因此我们需要在监听ListView ...

  5. Java中print、printf、println

    Java中的System.out输出会用到print.println以及printf命令. 其中 print一般的标准输出,但是不换行. println对比print即在结尾处多了换行.  eg:pr ...

  6. DOM中元素节点、属性节点、文本节点

    DOM中有12中节点,但最常用到的是元素节点,属性节点,文本节点. 元素节点的节点类型(nodeType)是1: 属性节点的节点类型(nodeType)是2: 文本节点的节点类型(nodeType)是 ...

  7. thinkPHP开发基础知识 包括变量神马的

    hinkPHP框架开发的应用程序,一般都采用单一入口的方式,下面是在应用首页文件中实现的定义: 1.在首页定义thinkPHP框架路径 2.定义项目名称及路径,一般项目名称与项目文件夹名称保持一致 3 ...

  8. 串口调试,提示the given port name does not start with COM/com异常解决办法,,发现是打印机在搞怪

    串口测试时,用到串口,把打印机的拔下来,换上测试的,程序一打开就提示错误:the given port name does not start with COM/com or does not res ...

  9. com组件接口

    int main( int argc, char *argv[] ) {    cout << "Initializing COM" << endl;   ...

  10. MYSQL 日期函数【转】

    MySQL日期时间函数大全 DAYOFWEEK(date) 返回日期date是星期几(=星期六,ODBC标准) mysql> select DAYOFWEEK('1998-02-03'); WE ...