2009-11-27 181 views
2

在UITextView中寫入的文本多於完全適合其內容的文本時,文本將向上滾動,光標通常會將自己置於視圖底線上方一行或兩行。這有點令人沮喪,因爲我希望我的應用程序充分利用文本視圖的整個高度。UITextView自動滾動到最後一行

基本上我想要的是配置UITextView寫入它的最低部分,而不是僅用於滾動。

我看到一些類似的問題here,herehere。不過,我還沒有看到適當的解決方案。

感謝

回答

8

我有一個稍微不同的實現(我想禁用滾動),但我也不得不停止光標跳出我的UITextView。爲此,我在UITextView子類中實現了一個空scrollRectToVisible。就像這樣:

- (void)scrollRectToVisible:(CGRect)rect animated:(BOOL)animated 
{ 
// do nothing. This fixes the cursor jumping above the field defect. 
} 
+0

這是一個很好的提示。我可以重新實現這個方法,使文本視圖自動滾動完全按照我需要的方式。 – 2009-12-17 14:46:15

0

如果我理解正確的,你可以使用

[textView setScrollEnabled:NO]; 

禁用滾動。鍵入有關不算什麼,當光標到達下緣...也許這不是很好的解決辦法,但你可以在

- (BOOL)textView:(UITextView *)textView shouldChangeTextInRange:(NSRange)range replacementText:(NSString *)text 

添加一些閾值(在[textView text]最大字符),並返回NO UITextView的委託方法,如果[[textView text] length] > maxCharacters

+0

也許我不清楚。我仍然希望視圖可以滾動。但我也希望能夠在整個高度上書寫文字。這是默認情況下通常不可能的事情,因爲當你點擊最後一行但最少的行時,文本將開始彈起(我可以通過向下滾動文本來告訴UITextView擴展到該行的下面)。 – 2009-11-27 19:33:03

0

我覺得似乎財產 'contentOffset',也可以使用...

2

優秀的解決方案是在子類中的UITextView添加行

-(void) setContentOffset:(CGPoint)contentOffset { 
    [self setContentInset:UIEdgeInsetsZero]; 
    [super setContentOffset:contentOffset]; 
} 

它的工作!

+0

它的工作原理!謝謝Zeine。 – Seunghoon 2011-04-16 22:03:56

0

使用本

NSRange myRange=NSMakeRange(outPutTextView.text.length, 0); 

[outPutTextView scrollRangeToVisible:myRange]; 
0

我得通過SETFRAME的最後一行:

  1. 您可以SETFRAME約行高
  2. 當你編輯,在 - ( BOOL)textView:shouldChangeTextInRange:replacementText:,使用scrollRangeToVisible:,參數是selectedRange
  3. 當您結束編輯時, setframe到原始大小