在ios開發中,用到多行輸入時通常都會用到UITextView。常見的好比說聊天輸入框,評論輸入框等,當用戶輸入多內容時,咱們但願高度能根據用戶輸入的內容擴大而擴大。其實實現這個功能也不是很難,只須要自定義一個類並繼承UITextView,而後實現其代理UITextViewDeletage,重寫textViewDidChange,只須要在這個方法中進行處理便可。下面開始擼代碼:ios
1.先建立一個類:MyTextViewgit
class MyTextView: UITextView,UITextViewDelegate {github
varmaxHeight:CGFloat=60//定義最大高度ide
overrideinit(frame:CGRect, textContainer:NSTextContainer?) {測試
super.init(frame: frame, textContainer: textContainer)ui
//textview的一些設置spa
self.delegate=self3d
self.layer.borderColor = UIColor.lightGray.cgColor代理
self.layer.borderWidth=0.5code
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人生