iOS UITextView 高度隨文字自己主動添加,並尾隨鍵盤移動(二)

來源:互聯網
上載者:User

標籤:data   file   height   通過   滑動   lock   comment   一個   效果   

上節地址:http://blog.csdn.net/lwjok2007/article/details/47401293

接著上節我們來實現 輸入框自己主動調節高度

首先,我們得知道,要推斷是否該換行了 前提是得知道 一行能夠輸入多少文字,

我們非常easy能知道我們輸入框的寬度,那麼下來僅僅要知道每一個文字的寬度就能夠計算一行文字的個數了

然後依據文字文字高度計算每超過一行我們須要給textView 加入的高度


首先要計算每一個文字的寬度和高度(我們依照正方形處理)

我們用到了 一個方法 sizeWithAttributes

他為我們提供了計算文字大小的方法。詳細大家能夠去研究api 這裡我們直接使用

首先建立一個變數

    float heightText;//文字高度


然後使用該方法計算高度(前提是。文字的大小得提前知道。我們就依照20 計算)

    NSDictionary *[email protected]{NSFontAttributeName:[UIFont systemFontOfSize:20.0]};    CGSize contentSize=[@"我" sizeWithAttributes:dict];    heightText=contentSize.height;


接下來我們須要在文字框內容變化的時候計算全部文字的長度,推斷是否超過了文字框寬度

實現 UITextViewDelegate 協議的 

-(void)textViewDidChange:(UITextView *)textView  方法檢測文字改動

@interface CommentView()<UITextViewDelegate>

-(void)textViewDidChange:(UITextView *)textView{    float currentLineNum=1;//預設文字框顯示一行文字    float textViewWidth=self.textView.frame.size.width;//取得文字框高度    NSString *content=textView.text;    NSDictionary *[email protected]{NSFontAttributeName:[UIFont systemFontOfSize:20.0]};    CGSize contentSize=[content sizeWithAttributes:dict];//計算文字長度    float numLine=ceilf(contentSize.width/textViewWidth); //計算當前文字長度相應的行數         if(numLine>currentLineNum ){        //假設發現當前文字長度相應的行數超過。 文字框高度。則先調整當前view的高度和位置。然後調整輸入框的高度。最後改動currentLineNum的值        self.frame=CGRectMake(self.frame.origin.x, self.frame.origin.y-heightText*(numLine-currentLineNum), self.frame.size.width, self.frame.size.height+heightText*(numLine-currentLineNum));        textView.frame=CGRectMake(textView.frame.origin.x, textView.frame.origin.y, textView.frame.size.width, textView.frame.size.height+heightText*(numLine-currentLineNum));        currentLineNum=numLine;    }else if (numLine<currentLineNum ){        //次數為刪除的時候檢測文字行數降低的時候        self.frame=CGRectMake(self.frame.origin.x, self.frame.origin.y+heightText*(currentLineNum-numLine), self.frame.size.width, self.frame.size.height-heightText*(currentLineNum-numLine));        textView.frame=CGRectMake(textView.frame.origin.x, textView.frame.origin.y, textView.frame.size.width, textView.frame.size.height-heightText*(currentLineNum-numLine));        currentLineNum=numLine;    }}





好了 下來我們嘗試 測試一下 看效果出來沒


最後再給大家提點小問題 嘗試解決一下

比方說我們做評論view 行數不能無限增長要不然超出了螢幕。

我們假設限制文字框最高三行。超過三行的時候就不再添加。讓文字框通過滑動解決,同一時候刪除的時候也要讓文字框高度減小最少一行

大家能夠試試


有什麼問題能夠加群討論


代碼上傳至群空間 【文字框高度自己主動調整1.zip】
蘋果開發群 :414319235  歡迎增加  歡迎討論問題





iOS UITextView 高度隨文字自己主動添加,並尾隨鍵盤移動(二)

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.