在ios开发中,用到多行输入时一般都会用到UITextView。常见的比如说聊天输入框,评论输入框等,当用户输入多内容时,我们希望高度能根据用户输入的内容扩大而扩大。其实实现这个功能也不是很难,只需要自定义一个类并继承UITextView,然后实现其代理UITextViewDeletage,重写textViewDidChange,只需要在这个方法中进行处理即可。下面开始撸代码:
1.先创建一个类:MyTextView
class MyTextView: UITextView,UITextViewDelegate {
var maxHeight:CGFloat=60//定义最大高度
override init(frame:CGRect, textContainer:NSTextContainer?) {
super.init(frame: frame, textContainer: textContainer)
//textview的一些设置
self.delegate=self
self.layer.borderColor = UIColor.lightGray.cgColor
self.layer.borderWidth=0.5
self.layer.cornerRadius=5
self.layer.masksToBounds=true
}
required init?(coder aDecoder:NSCoder) {
fatalError("init(coder:) has not been implemented")
}
func textViewDidChange(_textView:UITextView) {
//获取frame值
letframe = textView.frame
//定义一个constrainSize值用于计算textview的高度
let constrainSize=CGSize(width:frame.size.width,height:CGFloat(MAXFLOAT))
//获取textview的真实高度
var size = textView.sizeThatFits(constrainSize)
//如果textview的高度大于最大高度高度就为最大高度并可以滚动,否则不能滚动
if size.height>=maxHeight{
size.height=maxHeight
textView.isScrollEnabled=true
}else{
textView.isScrollEnabled=false
}
//重新设置textview的高度
textView.frame.size.height=size.height
}
}
2.开始测试:
class ViewController:UIViewController{
override func viewDidLoad() {
super.viewDidLoad()
//测试自定义的TextView
lettextview =MyTextView(frame:CGRect(x:20,y:100,width:200,height:30))
self.view.addSubview(textview)
}
}
3.运行结果:
总结:UITextView高度自适应的实现就到这里了,如果有什么问题欢迎评论、留言,谢谢!
demo下载地址:MyTextViewDemo
博客园地址:猿哥爱码