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. 处理SVN的提交代码冲突

    工具: 一台开发的电脑,myeclipse,TortoiseSVN1.8 步骤: 1.不管是提交.更新.编辑冲突第一个操作都应该是和资源库进行同步,项目右键==>Team==>于资源库同步 ...

  2. Java基础整理(1)

    1.源代码的文件名必须与公共类(public)的类名一致,而且一个源代码文件中最多只能有一个公共类(public) 2.注释: 3种 行注释  以双斜线  //  开始 段落注释  /*  注释内容 ...

  3. 使用JS对HTML标签进行增删改查

    以下为通过JS对li标签进行简单的增删改查: <!DOCTYPE html> <html xmlns="http://www.w3.org/1999/xhtml" ...

  4. 用命令实现Win7远程桌面关机和重启

    关机 shutdown -s -t 0 重启 shutdown -r -t 0 打开运行框(Win+R键),输入上述命令即可,后面的数字表示关机/重启延迟的时间 at 12:00 shutdown - ...

  5. Ov

  6. seafile

    ./setup-seafile-mysql.shChecking python on this machine ...  Checking python module: setuptools ... ...

  7. Linux内核中ioremap映射的透彻理解

    几乎每一种外设都是通过读写设备上的寄存器来进行的,通常包括控制寄存器.状态寄存器和数据寄存器三大类,外设的寄存器通常被连续地编址.根据CPU体系结构的不同,CPU对IO端口的编址方式有两种: (1)I ...

  8. EPPB also support BlackBerry device

    各位看倌不是小弟要賣弄英文,實在是外國朋友希望知道上一篇"雲取證"中所用的工具Elcomsoft Phone Password Breaker支援黑莓機否?又要求非要看到截屏才算數 ...

  9. 用Zend Studio12 导入在workspace中的项目

    第一步: 文件(file)->新建(NEW)->其他(other) 第二步: 在打开的对话框里选择 常规(Genneral)->项目(Project) 第三步: 在打开的对话框输入项 ...

  10. CentOS6.5_python2.7.3下virt-manager无法启动

    配置virt-manager: 1.安装virt-manager, libvirt, qemu-kvm 2.配置libvirtd开机启动: chkconfig libvirtd on   #取消开机启 ...