2014-06-27 96 views
5

我使用Xcode 5.1.1開發的ios7。由於有新的文本進入UITextView,所以如果文本上升,我希望它可以讓用戶看到新文本。我有一些工作,但顯示新文本的動畫是尷尬的。它幾乎就像是從文本的頂部開始一樣,每次被調用時都會很快到達底部。平滑的UITextView自動滾動到框架的底部

CGPoint p = [textview contentOffset]; [textview setContentOffset:p animated:NO]; [textview scrollRangeToVisible:NSMakeRange([textview.text length] - 1,0)];

此代碼獲取調用每次進入新文本的時間。我希望它能像默認的iPhone Messenger一樣順暢地隨便滑動。

+2

我認爲日回答自己的問題的首選方法是將答案與_Your Answer_表單中的問題分開。然後接受你自己的答案。它也讓你點! – Jeff

回答

10

正確的答案是設置:

_consoleView.layoutManager.allowsNonContiguousLayout = NO; 

在viewDidLoad中

然後:

_consoleView.text = text; 
[_consoleView scrollRangeToVisible:NSMakeRange(_consoleView.text.length - 1, 1)]; 
+0

謝謝 - 在堆棧溢出中平滑工作的唯一答案。 –

+0

Swift 3'self.yourTextField.scrollRangeToVisible(NSMakeRange(self.yourTextField.text.count - 1,0))'應該可以正常工作 – efwjames

3

(由一個問題編輯回答轉換爲一個社區維基答案見Question with no answers, but issue solved in the comments (or extended in chat)。)

的OP寫道:

解決方案:問題是,當文字被越來越插入texview它滾動到頂部,然後調用scrollRangeToVisible將其滾動到底部,這給動畫和動畫帶來不愉快的用戶體驗。我解決了這個由文本進入前禁止滾動,並啓用它後,輸入的文字,因此僅調用scrollRangeToVisible

[textview scrollRangeToVisible:textview.selectedRange]; 
textview.scrollEnabled= NO; 
textview.text = [textview.text stringByAppendingString:createdString]; 
textview.scrollEnabled= YES; 
+0

這不適合我。 – bedouger