2010-07-03 73 views
15

的底部我在使用此方法之前....iOS4的:無法以編程方式滾動到的UITextView

//TextView is a UITextView 

[TextView scrollRangeToVisible:NSMakeRange([TextView length], 0)]; 

...這將編程方式滾動到的UITextView的結束,但它似乎沒有在iOS 4.0中工作。有沒有辦法以編程方式滾動到UITextView的結尾而不更改可編輯性或插入點(用戶可以點擊UITextView並顯示鍵盤)?

另外,我是否需要指定文件所有者作爲委託?這有什麼不同嗎?

+0

你所說的 「不工作」 的意思是。它會滾動嗎?鍵盤被喚起了嗎? – TechZen 2010-07-03 13:28:15

+0

當使用 [TextView scrollRangeToVisible:NSMakeRange([TextView.text length],0)]; 它根本不滾動,但它不會更改textview的.editable(這對我很好)。 樣本項目展示,這是在 http://dl.dropbox.com/u/8256776/Bugsy.zip 它是一個UITextView和兩個按鈕的ViewController模板。 當一個按鈕被按下時,它會向UITextView添加「\ nFive」並嘗試向下滾動到最後(失敗)。 當其他按鈕被按下時,它會向UITextView中添加「\ nSix」並嘗試向下滾動到最後(失敗)。 – OscarTheGrouch 2010-07-03 19:27:11

+0

你是什麼意思失敗?你在模擬器上測試這個嗎?我看到textview滾動到底部......如果我將它滾動到頂部,當我按下五六個滾動條時,它會滾動到底部。它工作完美。 – SpaceDog 2011-01-25 02:21:04

回答

37

UITextView不具有長度屬性。 以下代碼適用於我的環境。

[TextView scrollRangeToVisible:NSMakeRange([TextView.text length], 0)]; 
6

答案並不適用於我,但遵循你將用於TableView的作品完美無缺。只要確保你的UITextView被命名爲textView。

if (textView.contentSize.height > textView.frame.size.height) 
{ 
    CGPoint offset = CGPointMake(0, textView.contentSize.height - textView.frame.size.height); 
    [self.textView setContentOffset:offset animated:YES]; 
} 
+1

是的!這工作完美(我已經嘗試了各種各樣的scrollRangeToVisible在我的應用程序!) – iPhoneDollaraire 2013-03-04 04:59:36

+0

這似乎比其他,接受的答案更好!謝謝 – Rambatino 2014-05-19 22:08:26

0

這就是我使用它的工作正常。所述shouldScrollTextToBottom由調用視圖(1個視圖控制器在調用堆棧低級)

(void)viewDidAppear:(BOOL)animated 
{ // scroll to bottom if required 
    if(shouldScrollTextToBottom) 
    [txtMyTextView scrollRectToVisible:CGRectMake(0, 0, txtMyTextView.frame.size.width, txtMyTextView.frame.size.height * 6) animated:YES]; 
} 

6是任意大量的這應該是的UITextView的高度的倍數設定。我發現值爲5時,我的視圖不滾動到絕對底部。

4

在IOS8中,對ensureLayoutForTextContainer的調用似乎使這個解決方案工作..花了我近一個小時來跟蹤這個。

logObject.layoutManager.ensureLayoutForTextContainer(logObject.textContainer) 

    logObject.setContentOffset(CGPointMake(0.0, logObject.contentSize.height), animated:false) 
1

這爲我工作:

[_myTextView.layoutManager ensureLayoutForTextContainer:_myTextView.textContainer]; 
[_myTextView scrollRangeToVisible:NSMakeRange([_myTextView.text length], 0)];