将UIScrollView滚动到键盘隐藏的UITextView时的奇怪行为

时间:2013-05-09 18:13:56

标签: ios uiscrollview uitextview

我在这里看了很多关于滚动和取消隐藏UITextField的帖子,并认为相同的代码应该适用于UITextView,但似乎并非如此。我遇到的第一个问题是我的示例应用程序是一个仅支持横向的iPad应用程序。通知返回的键盘大小使键盘的高度和宽度反转。

接下来,虽然我可以让scrollview滚动textview,但它并没有显示所有内容,实际上显示的textview数量取决于我在textview中点击的位置。它更像是滚动到光标所在的位置,这不是我想要的。

这是我正在使用的代码。它取自一个例子,唯一真正的变化是使用UITextView而不是UITextField。如果我唯一要做的就是用文本字段替换textview,它可以正常工作。

- (void)keyboardWasShown:(NSNotification*)aNotification
{
    NSDictionary* info = [aNotification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;
    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.width, 0.0);
    _myscrollview.contentInset = contentInsets;
    _myscrollview.scrollIndicatorInsets = contentInsets;
    CGRect aRect = self.view.frame;
    aRect.size.height -= kbSize.width;
    DebugLog(@"textview = %@", _textview);

    if (!CGRectContainsPoint(aRect, _textview.frame.origin) ) {
        CGPoint scrollPoint = CGPointMake(0.0, _textview.frame.origin.y-kbSize.width);
        [_myscrollview setContentOffset:scrollPoint animated:YES];
    }
}

2 个答案:

答案 0 :(得分:1)

如果您只想滚动到UITextView的顶部,可以通过

进行操作
[textview scrollRectToVisible:CGRectMake(0,0,1,1) animated:YES];

尝试搞乱以下方法。也许将其设置为textView的高度。你能发布这个问题的截图吗?

- (void)textViewDidChangeSelection:(UITextView *)textView
{
    [textView setSelectedRange:NSMakeRange(0, 0)];
}

答案 1 :(得分:0)

Apple提供了正确的方法here(请参阅清单4-1)。它适用于UITextField和UITextView。我们不需要编辑范围或其他任何内容。它应该是需要处理的scrollview。标记为“已回答”的标记为'可能有用,但我们最好遵循创作者的方法!