关于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/