ios swift UITextView高度自適應


在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人生

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM