iOS开发学习之 - 高度自适应之计算文字高度
2016-04-01 16:09
453 查看
需要自适应的情况有很多种,本文介绍的是文字高度变化的情况。
有时一个控件的高度不是固定的,比如从网上抓取某条微博的内容并显示在label中。
不同的微博内容是不一样的,有时可能只有一行,有时可能是多行,所以label的高度就要随着文字的高度变化而变化。
那么如何计算文字的高度呢?旧版和新版的做法不同,在这里我只介绍新的,旧的就不说了。
-boundingRectWithSize:options:attributes:context:方法的使用:
先来个例子,直观一些:
然后说说各个参数。
首先是size,它是文字的尺寸,比如说文字放在一个label中,那么文字的宽度也就是label的宽度,比如上例中的260,把它换成你想要的数字即可。因为我们要的是高度自适应,所以说宽度要固定(比如260),而高度则是需要变化的,所以在这里我们给它一个足够大的height值就可以,比如MAXFLOAT,或者写1000也没问题。
然后是options,它的类型是 NSStringDrawingOptions,这是个枚举,一共有四种:
通常至少要包含 NSStringDrawingUsesLineFragmentOrigin,但以我的经验来说,让options包含NSStringDrawingUsesLineFragmentOrigin 和 NSStringDrawingUsesFontLeading
好像更好一些(用'|'连接)
然后是attributes:官方文档中的解释是:A dictionary of text attributes to be applied to the string. These are the same attributes that can be applied to anNSAttributedString
object, but in the case ofNSString objects, the attributes apply to the entire string, rather than ranges within the string.
简单来说就是文字的属性,它是一个字典,里面可以有多项,比如上例中只有一项文字的字体:
NSFontAttributeName:[UIFontsystemFontOfSize:16];
16就是你想要计算的文字字体大小,这个值一定要和最初设置的值相等,否则会出现问题。
有的同学可能会问:“啥是最初设置的值?”
比如说你想让_myLabel的高度随着label里的文字的高度变化而变化,在初始化label时会设置
_myLabel.font = [UIFontsystemFontOfSize:15];
那么设置attributes时就不能写16而要写15了
最后是context,它是个NSString用于附加一些信息,此处我们不需要它,所以传nil即可。
有时一个控件的高度不是固定的,比如从网上抓取某条微博的内容并显示在label中。
不同的微博内容是不一样的,有时可能只有一行,有时可能是多行,所以label的高度就要随着文字的高度变化而变化。
那么如何计算文字的高度呢?旧版和新版的做法不同,在这里我只介绍新的,旧的就不说了。
-boundingRectWithSize:options:attributes:context:方法的使用:
先来个例子,直观一些:
CGSize size = CGSizeMake(260, MAXFLOAT); NSStringDrawingOptions options = NSStringDrawingUsesLineFragmentOrigin | NSStringDrawingUsesFontLeading; NSDictionary *attr = @{NSFontAttributeName:[UIFont systemFontOfSize:17]}; CGRect tmpRect = [baseHM.contentText boundingRectWithSize:size options:options attributes:attr context:nil];
然后说说各个参数。
首先是size,它是文字的尺寸,比如说文字放在一个label中,那么文字的宽度也就是label的宽度,比如上例中的260,把它换成你想要的数字即可。因为我们要的是高度自适应,所以说宽度要固定(比如260),而高度则是需要变化的,所以在这里我们给它一个足够大的height值就可以,比如MAXFLOAT,或者写1000也没问题。
然后是options,它的类型是 NSStringDrawingOptions,这是个枚举,一共有四种:
通常至少要包含 NSStringDrawingUsesLineFragmentOrigin,但以我的经验来说,让options包含NSStringDrawingUsesLineFragmentOrigin 和 NSStringDrawingUsesFontLeading
好像更好一些(用'|'连接)
然后是attributes:官方文档中的解释是:A dictionary of text attributes to be applied to the string. These are the same attributes that can be applied to anNSAttributedString
object, but in the case ofNSString objects, the attributes apply to the entire string, rather than ranges within the string.
简单来说就是文字的属性,它是一个字典,里面可以有多项,比如上例中只有一项文字的字体:
NSFontAttributeName:[UIFontsystemFontOfSize:16];
16就是你想要计算的文字字体大小,这个值一定要和最初设置的值相等,否则会出现问题。
有的同学可能会问:“啥是最初设置的值?”
比如说你想让_myLabel的高度随着label里的文字的高度变化而变化,在初始化label时会设置
_myLabel.font = [UIFontsystemFontOfSize:15];
那么设置attributes时就不能写16而要写15了
最后是context,它是个NSString用于附加一些信息,此处我们不需要它,所以传nil即可。
相关文章推荐
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 峰回路转,Firefox 浏览器即将重返 iOS 平台
- 个人信息安全报告发布:有 APP 每分钟调用位置权限 1468 次
- 不可修补的 iOS 漏洞可能导致 iPhone 4s 到 iPhone X 永久越狱
- 下载量超过一亿的流行应用被发现含有恶意模块
- iOS 12.4 系统遭黑客破解,漏洞危及数百万用户
- 每日安全资讯:NSO,一家专业入侵 iPhone 的神秘公司
- [转][源代码]Comex公布JailbreakMe 3.0源代码
- 苹果与Siri的七年之痒:“宫斗”戏码不断上演
- js+css使文本框自动适应内容的高度
- APP添加CNZZ统计插件教程 Android版添加phonegap
- Jquery实现textarea根据文本内容自适应高度
- jQuery实现等比例缩放大图片让大图片自适应页面布局
- Android APP与媒体存储服务的交互
- Iframe实现跨浏览器自适应高度解决方法
- java实现收藏名言语句台词的app
- 修改Android App样式风格的方法
- Android App数据格式Json解析方法和常见问题
- 讲解iOS开发中基本的定位功能实现