关于UITextView / String的尺寸

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

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

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

let fixedWidth = textView.frame.size.width // 在被实际layout前,得到的值为XIB中的设定值
let size = textView.sizeThatFits(CGSize( 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/

原文地址:https://www.cnblogs.com/wavky/p/5722822.html