在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.運行結果:

總結:UITextView高度自適應的實現就到這里了,如果有什么問題歡迎評論、留言,謝謝!
demo下載地址:MyTextViewDemo
簡書地址: Code人生