iOS 8 开始可以配合 AutoLayout 自动估算文本的高度,但是当 Cell 比较复杂的时候,还会需要手动去计算。首先声明一个样式

var TextStyle : [String : NSObject] {
get { let paraStyle = NSMutableParagraphStyle() paraStyle.minimumLineHeight = 17.3 paraStyle.lineSpacing = paraStyle.lineBreakMode = NSLineBreakMode.ByWordWrapping paraStyle.paragraphSpacing = paraStyle.paragraphSpacingBefore = return [NSForegroundColorAttributeName: UIColor.blackColor(),
NSKernAttributeName: CGFloat(0.5),
NSFontAttributeName: UIFont.systemFontOfSize(15.0),
NSParagraphStyleAttributeName: paraStyle
]
}
}

如果你的文本里含有很多特殊字符,例如颜文字,通过 NSKernAttributeName 设置字间距可以算出更宽松的结果。

以 UILabel 为例,设置其 attributedText

label.attributedText = NSAttributedString(string: "Hello World", attributes: TextStyle)) 

再利用 boundingRectWithSize 这个方法来计算其约束后的高度,传入一个 width 为宽度约束,然后利用我们声明的样式来计算高度。

func sizeHeightWithText(attrString: NSString, width: CGFloat, textAttributes: [NSObject : AnyObject]) -> CGSize {

    var rect = attrString.boundingRectWithSize(CGSizeMake(width, CGFloat.max), options: .UsesLineFragmentOrigin | .UsesFontLeading, attributes: textAttributes, context: nil)

    return CGSize(width: rect.width, height: rect.height)
}

如果你使用的是 UITextView,那么还需要对 UITextView 做一些处理来去掉他的边距。

textView.textContainer.lineFragmentPadding =
textView.textContainerInset = UIEdgeInsetsZero
 
 

Swift计算文本宽高的更多相关文章

  1. Swift - 计算文本高度

    Swift - 计算文本高度 效果 源码 // // String+StringHeight.swift // StringHeight // // Created by YouXianMing on ...

  2. Swift 获取屏幕宽高

    let screenh = UIScreen.mainScreen().applicationFrame.size.heightlet screenw = UIScreen.mainScreen(). ...

  3. ios计算字符串宽高,指定字符串变色,获取URL参数集合

    #import <Foundation/Foundation.h> @interface NSString (Extension) - (CGFloat)heightWithLimitWi ...

  4. 写个js动态调整图片宽高 (原创)

    <body style="TEXT-ALIGN: center;"> <div id="testID" style="backgro ...

  5. NSAttributedString宽高计算小技巧

    通常对于CoreText之类自己实现绘制的控件来说,计算富文本的宽高事实上须要依赖CTFramesetterSuggestFrameSizeWithConstraints这种方法. 但有些时候.我们可 ...

  6. JS-自制提速小工具:开发页面时需要按比例计算宽高值的快速计算器

    <!DOCTYPE html><html> <head> <meta charset="UTF-8"> <meta name= ...

  7. 元素transform: rotate()之后,元素宽高该怎么计算?

    通常,利用transform: rotate()元素之后,我们并不会去在意元素大小的变化,因为看上去并没有什么变化.虽然看上去没有变化,其实是有变化的.下面用一个例子来说明一下. html: < ...

  8. js和php计算图片自适应宽高算法实现

    js Code: <script> $width = $(imgobj).width(); //图原始宽 $newheight = $(imgobj).height(); //图原始高 $ ...

  9. PHP-根据字符串和所用字体计算字符串所占宽高

    今天由于用GD画图, 需要把一段文字在一个框内居中, 但是文字的宽度如果用strlen($str) * $font_size来计算的话, 由于文字不是等宽高的, 所以会导致偏离, 最后选用的GD库的i ...

随机推荐

  1. spring HibernateValidator 验证 子类不起作用

    spring HibernateValidator 验证 子类不起作用,在要验证的子类前加上@Valid即可. public class UserInfo { private int Id; @Val ...

  2. 使用ngin的静态文件下载

    1,主配置文件nginx.xml #user nobody; worker_processes 1; #error_log logs/error.log; #error_log logs/error. ...

  3. idea 下的maven使用问题汇总

    1,-Dmaven.multiModuleProjectDirectory system propery is not set. Check $M2_HOME environment variable ...

  4. PowerDesigner之PDM(物理概念模型)

    一.PDM概述 PDM(物理数据模型),通俗地理解,就是在PowerDesigner中以图形化的方式展示和设计数据库. PDM中涉及到的基本概念包括: 表: 列: 视图: 主键: 候选键: 外键: 存 ...

  5. SVN 记录冲突、忽略

    之前对SVN不熟悉,一碰到冲突就怕得要死,不知道应该怎么处理.今天必须要正视这个问题,研究一下. 一.冲突 SVN非常智能,它不像VSS那样,一个人在改的时候必须以独占的方式签出文件,导致其他人不能够 ...

  6. dedecms 文章页调用来源合适时间的方法

    时间: 一:{dede:field.pubdate function="MyDate('Y-m-d H:i',@me)"/} 二:{dede:field name='pubdate ...

  7. 关于OJ上内存问题的试验

    char类型占一个字节 int类型占4个字节 如果杭电OJ上给的范围是32678K,那么内存大小就是32678*1024=33554432 那么可以开到多大的数组呢?!可以开到很大,但是可用的就只有3 ...

  8. 条款20 STL函数对象

    继承标准STL的函数对象 1: struct PopLess : public atd::binary_function<state,state,bool> 2: { 3: bool op ...

  9. activiti搭建(三)整合Modeler

    转载请注明源地址:http://www.cnblogs.com/lighten/p/5878169.html 接上一章,activiti工作流引擎虽然运行了起来,但是什么都没有.activiti官方在 ...

  10. 如何使用CSS3画出一个叮当猫

    刚学习了这个案例,然后觉得比较好玩,就练习了一下.然后发现其实也不难,如果你经常使用PS或者Flash的话,应该就会知道画个叮当猫是很容易 的事,至少我是这么觉得.但是,用CSS3画出来确实是第一次接 ...