关于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. ERROR: The partition with /var/lib/mysql is too full! failed!

    发现:ERROR: The partition with /var/lib/mysql is too full! failed! 然后df -h 发现硬盘100%   于是分析到底什么占用了这近两百G ...

  2. Effective Java 76 Write readObject methods defensively

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

  3. jQuery Validate 表单验证插件----自定义校验结果样式

    一.下载依赖包 网盘下载:https://yunpan.cn/cryvgGGAQ3DSW  访问密码 f224 二.引入依赖包 <script src="../../scripts/j ...

  4. 设计模式C#实现(八)——原型模式

    原型模式:用原型实例指定创建对象的种类,并且通过拷贝这些原型创建新的对象.(要创建一个对象,这个对象为实现原型接口,方法是原型克隆.克隆只是方法而不是原型模式的目的,创建对象才是目的) UML类图: ...

  5. asp.net连接SQL SERVER 2012的方法

    在web.config文件中添加 <connectionStrings> <add name="SQLConnectionString" connectionSt ...

  6. 纯CSS3制作学生入学档案表单样式代码

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  7. (转)c++类的成员函数存储方式(是否属于类的对象)---一道面试题引发的思考

    昨天去面试一家公司,面试题中有一个题,自己没弄清楚,先记录如下: class D { public: void printA() { cout<<"printA"< ...

  8. Oracle 性能优化之一二

    本人使用oracle时间不多,但是在项目中积累了一些经验教训,记录于此,以方便自己和他人解决类似的问题. 1.temp space超出限制的问题 问题场景: 在复杂的ETL query中,有时候一张f ...

  9. LeetCode题目分类

    利用堆栈:http://oj.leetcode.com/problems/evaluate-reverse-polish-notation/http://oj.leetcode.com/problem ...

  10. 【每天一题ACM】 斐波那契数列(Fibonacci sequence)的实现

    最近因为一些原因需要接触一些ACM的东西,想想写个blog当作笔记吧!同时也给有需要的人一些参考 话不多说,关于斐波那契数列(Fibonacci sequence)不了解的同学可以看看百度百科之类的, ...