2009-11-27 144 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到原始大小