UITextView自动滚动到最后一行

时间:2009-11-27 15:11:03

标签: iphone cocoa-touch uiscrollview uitextview

当在UITextView中写入的文本多于完全可以放在其中的文本时,文本将向上滚动,光标通常会在视图的底线上方放置一行或两行。这有点令人沮丧,因为我希望我的应用程序能够充分利用文本视图的整个高度。

基本上我想要的是配置UITextView以写入它的最低部分而不是仅用于滚动。

我见过一些类似的问题hereherehere。但是我还没有看到合适的解决方案。

由于

6 个答案:

答案 0 :(得分:8)

我的实现略有不同(我想禁用滚动),但我也不得不停止光标跳出我的UITextView。为此,我在UITextView子类中实现了一个null scrollRectToVisible。像这样:

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

答案 1 :(得分:2)

优秀的解决方案是在子类UITextView中添加行

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

这是工作!

答案 2 :(得分:1)

使用此

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

[outPutTextView scrollRangeToVisible:myRange];

答案 3 :(得分:0)

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

[textView setScrollEnabled:NO];

禁用滚动。当光标到达下边距时不要键入...也许这不是一个好的解决方案,但你可以添加一些阈值([textView text]中的最大字符数)并返回NO

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

如果是[[textView text] length] > maxCharacters,则委托UITextView的方法。

答案 4 :(得分:0)

我发现似乎属性'contentOffset'也可以使用......

答案 5 :(得分:0)

我已经通过setframe得到了最后一行:

  1. 您可以将 setframe 设置为大约行高
  2. 在编辑时,在 - (BOOL)textView:shouldChangeTextInRange:replacementText:中,使用scrollRangeToVisible:,参数为selectedRange
  3. 结束编辑时, setframe 为原始尺寸