現(xiàn)在的項(xiàng)目中需要實(shí)現(xiàn)類似微信聊天中的輸入模式,就是輸入框隨著鍵盤的高度變化而變化汞扎,并且同時(shí)輸入框的高度跟著文本的輸入高度而變化季稳。效果如圖:
首先,該項(xiàng)目中主要用了四個(gè)屬性澈魄,各個(gè)屬性的主要用途注釋中已經(jīng)寫清楚
鍵盤工具欄主要用于收起鍵盤:
以下是另外兩個(gè)控件的簡單設(shè)置景鼠,其中需要注意的是,textview必須要設(shè)置字體大小即font痹扇,不然當(dāng)在輸入框中首先輸入中文時(shí)會(huì)崩潰铛漓,但是先輸入英文再輸入中文則不會(huì)崩潰,至于為什么我現(xiàn)在也不太清楚鲫构,只是在崩潰時(shí)無意設(shè)置了一下font浓恶,便沒有問題了。
在viewdidload里面確定輸入框即其背景的初始位置结笨,通過textview的inputAccessoryView屬性設(shè)置工具欄问顷,接著監(jiān)聽鍵盤frame即將發(fā)生變化的通知
接下來就是監(jiān)聽到鍵盤位置變化后所執(zhí)行的方法了。UIKeyboardWillChangeFrameNotification這個(gè)通知是鍵盤Fram即將發(fā)生變化時(shí)就會(huì)跑出通知禀梳,我們可通過這個(gè)通知獲取到鍵盤的UIKeyboardFrameEndUserInfoKey的關(guān)鍵字杜窄,也即鍵盤位置改變后的位置,因?yàn)槲覀円ㄟ^這個(gè)位置來確定輸入框的位置算途。當(dāng)鍵盤即將消失時(shí)我們設(shè)置輸入框的位置為原始位置塞耕,當(dāng)鍵盤即將展示時(shí)我們將輸入框的位置設(shè)置在鍵盤之上。并在該過程中獲取鍵盤的高度用于下面的動(dòng)態(tài)改變輸入框的高度嘴瓤。當(dāng)做完這些后扫外,輸入框就已經(jīng)可以隨著鍵盤的變化而變化了莉钙,但此時(shí)輸入框的高度始終展示一行數(shù)據(jù),上一行的數(shù)據(jù)會(huì)自動(dòng)滾到看不見的地方筛谚,如下圖效果1所示:
當(dāng)實(shí)現(xiàn)了效果1之后磁玉,為了實(shí)現(xiàn)最終的效果,我們還得要監(jiān)聽一下textview的方法驾讲。根據(jù)輸入的字符串計(jì)算高度蚊伞。boundingRectWithSize這個(gè)方法的options可以有四種選擇,每種選擇也都在注釋里基本寫了一些吮铭,其余的代碼也就是一般的設(shè)置控件位置了时迫。
最后,demo的鏈接是github.com/hmj0930/WechatInputTextView.git