UITextView在开发中经常用到,但一直也没对它进行正整理总结,以至于在使用的时候忽略一些小问题,还要浪费不必要的时间。
计算文本的高度和调整文本内间距
|
|
上面用两个方法计算文本高度只是为了方便比较,当然计算UITextView的高度最好的办法还是是使用sizeThatFits:
计算,它并不改变UITextView的size,它只是让UITextView根据已有文本内容和给定size计算出UITextView的contentSize。那么是什么导致两个计算高度不一致,因为textView.textContainerInset
默认值是UIEdgeInsetsMake(8, 0, 8, 0)
,设置textView.textContainerInset = UIEdgeInsetsZero
解决,再看下计算的高度值:
Output: sizeThatFits: 84.000000
boundingRectWithSize: 83.535156
计算结果基本接近,但是文本左右仍然有一定的间隔,此时可以使用lineFragmentPadding
属性,通过设置textView.textContainer.lineFragmentPadding = 0
可以去除左右间距,苹果API解释为在文本框每行的开头和结尾填充宽度默认为5,还是拿到值验证下:
|
|
占位符
第一种方法:使用将label添加在UITextView上利用delegate设置label的透明度来模仿UITextField占位符效果。这种方法使用起来虽然能达到占位占位符效果,但是多出用到UITextView时就用很多重复的代码,所以放弃使用此方法。
第二种方法:继承UITextView在其内部添加个UITextView
|
|
|
|
第三种方法:使用UITextView的Category实现占位符效果,本来是打算自己实现的,但是在github上看到一个别出心裁的UITextView-Placeholder方法,巧妙的运用Method Swizzling、关联属性、KVO等方法实现了占位符功能,不要吝啬使用方法,推荐使用这种方法。
限制最大行数
根据行数计算出textView的最大高,每行高度 * 总行数 + 文字上下间距。
|
|
适应文字高度
|
|
随键盘弹出效果
1、添加监听
|
|
2、处理键盘位置变化
|
|