ios swift UITextView高度自适应

时间:2020-12-24 23:38:39

在ios开发中,用到多行输入时一般都会用到UITextView。常见的比如说聊天输入框,评论输入框等,当用户输入多内容时,我们希望高度能根据用户输入的内容扩大而扩大。其实实现这个功能也不是很难,只需要自定义一个类并继承UITextView,然后实现其代理UITextViewDeletage,重写textViewDidChange,只需要在这个方法中进行处理即可。下面开始撸代码:

1.先创建一个类:MyTextView

class MyTextView: UITextView,UITextViewDelegate {

varmaxHeight:CGFloat=60//定义最大高度

overrideinit(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

}

requiredinit?(coder aDecoder:NSCoder) {

fatalError("init(coder:) has not been implemented")

}

functextViewDidChange(_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.开始测试:

classViewController:UIViewController{

overridefuncviewDidLoad() {

super.viewDidLoad()

//测试自定义的TextView

lettextview =MyTextView(frame:CGRect(x:20,y:100,width:200,height:30))

self.view.addSubview(textview)

}

}

3.运行结果:

ios swift UITextView高度自适应
 

总结:UITextView高度自适应的实现就到这里了,如果有什么问题欢迎评论、留言,谢谢!

demo下载地址:MyTextViewDemo

简书地址:Code人生