关于UITextView以及String的尺寸动态获取

iOS7开始,UITextView设置text后不会立即反映到contentSize属性,而是在父容器layoutSubviews时进行contentSize的计算。

在viewDidAppear中可得到contentSize。

需要实时测量UITextView获取真实尺寸时,可尝试通过以下方式得到:

let fixedWidth = textView.frame.size.width // 在被实际layout前,得到的值为XIB中的设定值
let size = textView.sizeThatFits(CGSize(width: fixedWidth, height: CGFloat.max))

需要测量String本身绘制所需空间时,可调用boundingRectWithSize方法获取:

NSString / NSString / NSMutableAttributedString .boundingRectWithSize(NSString) -> CGRect

但不等于UITextView所占用的空间面积,因为还有行高、边框等元素未进行加算

参考:http://stackoverflow.com/questions/50467/how-do-i-size-a-uitextview-to-its-content

更新frame

当需要手动更新View的frame区域时(仅限于不启用AutoLayout情况下):

CGRect frame = view.frame;
frame.size.height = newHeight;
view.frame = frame;

关于动态高度的UITextView

启动UITextView动态高度特性,需要禁用Scrolling Enabled。

嵌套于UIView中的UITextView不会适配内容自动resize,需要配合代码更改约束条件constant值,并触发sizeToFit或重新layout。

操作方法可参考:

iOS Tips: Dynamic UITextView

https://medium.com/@pj_/ios-tips-dynamic-uitextview-102e73853fbc#.9golj62ci

AutoLayout with Dynamic UITextView height

http://imnotyourson.com/autolayout-with-dynamic-uitextview-height/

关于UITextView / String的尺寸的更多相关文章

  1. 【C语言探索之旅】 第二部分第七课:文件读写

    内容简介 1.课程大纲 2.第二部分第七课: 文件读写 3.第二部分第八课预告: 动态分配 课程大纲 我们的课程分为四大部分,每一个部分结束后都会有练习题,并会公布答案.还会带大家用C语言编写三个游戏 ...

  2. React简明学习

    前面的话 React让组件化成为了前端开发的基本思路,比传统思路可以更好的控制前端复杂度,旧的开发方法受到了影响,如分离式的HTML/CSS.非侵入式JS.模板语言.MVC.CSS文件.Bootstr ...

  3. Java基础学习笔记二 Java基础语法

    注释 注释用来解释和说明程序的文字,注释是不会被执行的. 单行注释 //这是一条单行注释 public int i; 多行注释 /* 这是 * 一段注释, * 它跨越了多个行 */ public vo ...

  4. element-ui 源码解析 一

    Button组件 button.vue <template> <button class="el-button" @click="handleClick ...

  5. Java基础二(变量、运算符)

    1.变量2.运算符 ###01变量概述 * A: 什么是变量? * a: 变量是一个内存中的小盒子(小容器),容器是什么?生活中也有很多容器,例如水杯是容器,用来装载水:你家里的大衣柜是容器,用来装载 ...

  6. element-ui button组件 radio组件源码分析整理笔记(一)

    Button组件 button.vue <template> <button class="el-button" @click="handleClick ...

  7. element-ui inputNumber、Card 、Breadcrumb组件源码分析整理笔记(三)

    inputNumber组件 <template> <!--@dragstart.prevent禁止input中数字的拖动--> <div @dragstart.preve ...

  8. element-ui input组件源码分析整理笔记(六)

    input 输入框组件 源码: <template> <div :class="[ type === 'textarea' ? 'el-textarea' : 'el-in ...

  9. 02_Java基础_第2天(变量、运算符)_讲义

    今日内容介绍 1.变量 2.运算符 01变量概述 * A: 什么是变量? * a: 变量是一个内存中的小盒子(小容器),容器是什么?生活中也有很多容器, * 例如水杯是容器,用来装载水:你家里的大衣柜 ...

随机推荐

  1. Effective Java 76 Write readObject methods defensively

    Principle readObject method is effectively another public constructor, and it demands all of the sam ...

  2. Python基本数据结构-元组

  3. centOS 6.5下升级mysql,从5.1升级到5.7

    1.备份数据库,升级MySQL通常不会丢失数据,但保险起见,我们需要做这一步.输入命令: mysqldump -u xxx -h xxx -P 3306 -p --all-databases > ...

  4. MFC 窗口分割

    动态分割窗口: BOOL CMainFrame::OnCreateClient(LPCREATESTRUCT lpcs, CCreateContext* pContext) { , , CSize(, ...

  5. multiprocessing module in python(转)

    序.multiprocessing python中的多线程其实并不是真正的多线程,如果想要充分地使用多核CPU的资源,在python中大部分情况需要使用多进程.Python提供了非常好用的多进程包mu ...

  6. CentOS 6.5上MySQL安装部署与入门。

    centos 6.5 yum 安装mysql1. 安装软件:yum install -y mysql-server mysql mysql-devel2.启动服务:service mysqld sta ...

  7. python 邮件发送 脚本

    import smtplib from email.header import Header from email.mime.text import MIMEText from_addr = 'XXX ...

  8. selenium依次点击页面的删除按钮

    需要依次点击页面的删除按钮,如下图: @Test public static void FaBu() { TestMenuJump.jumpExam(driver); TestMenuJump.jum ...

  9. codeforces 709C C. Letters Cyclic Shift(贪心)

    题目链接: C. Letters Cyclic Shift 题意: 现在一串小写的英文字符,每个字符可以变成它前边的字符即b-a,c-a,a-z这样,选一个字串变换,使得得到的字符串字典序最小; 思路 ...

  10. Python中的逗号有什么作用?

    最近研究python  遇到个逗号的问题 一直没弄明白 今天总算搞清楚了 1.逗号在参数传递中的使用: 这种情况不多说  没有什么不解的地方 就是形参或者实参传递的时候参数之间的逗号 例如def  a ...