iOS版:滚动视图不滚动到正确的位置,当键盘可见(iOS: scrollView not scrol

2019-10-20 21:24发布

我使用的是6.1模拟器测试我的iOS应用。 我已经工作了几个小时我的滚动视图滚动到正确的位置时,键盘是可见的(用户点击一个TextView后)。 我曾尝试标明此页上正确的答案如下:

如何滚动的UIScrollView键盘出现时?

这是我目前有:

- (void)keyboardWasShown:(NSNotification*)aNotification {
    NSLog(@"keyboardWasShown");

    NSDictionary* info = [aNotification userInfo];
    CGSize kbSize = [[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size;

    UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height, 0.0);
    self.scrollView.contentInset = contentInsets;
    self.scrollView.scrollIndicatorInsets = contentInsets;

    // If active text field is hidden by keyboard, scroll it so it's visible
    // Your app might not need or want this behavior.
    CGRect aRect = self.view.frame;
    aRect.size.height -= kbSize.height;
    if (!CGRectContainsPoint(aRect, self.activeView.frame.origin) ) {
        NSLog(@"scrollToView");
        CGPoint scrollPoint = CGPointMake(0.0, self.stepDescriptionField.frame.origin.y-kbSize.height);
        NSLog(@"scrollPoint: %f", scrollPoint.y);
        [self.scrollView setContentOffset:scrollPoint animated:YES];
    }

}

你可以从上面的图片看到,如果用户点击的TextView,滚动视图不滚动到正确的位置(你应该能够看到的TextView的文本内容)。

奇怪的是,我手动试图改变y偏移量的scrollPoint的为不同的值,但它似乎对在窗口滚动到没有影响。 我究竟做错了什么?

其他的东西,可能是重要的:

  • 我已经自动版式关闭(以使得用户可以在该视图中垂直滚动)。
  • TextView的不可滚动(它是调整大小以适应其内容)

编辑

我发现,如果我加入我的偏移量,contentInsets如下:

UIEdgeInsets contentInsets = UIEdgeInsetsMake(0.0, 0.0, kbSize.height+50.0, 0.0);

视图将滚动到正确的位置。 唯一的缺点是,有在底部微胖:

有一个更好的方法吗?

Answer 1:

我用这一个的UITextField,而不是一个UITextView,但我相信它应该仍然工作一样。 这使我的文本框的键盘正上方位置。

keyboardWillShow是功能时NSNotificationCenter接收UIKeyboardWillShowNotification

-(void) keyboardWillShow:(NSNotification *)note
{
// Get the keyboard size
CGRect keyboardBounds;
[[note.userInfo valueForKey:UIKeyboardFrameBeginUserInfoKey] getValue: &keyboardBounds];

// Start animation
[UIView beginAnimations:nil context:NULL];
[UIView setAnimationBeginsFromCurrentState:YES];
[UIView setAnimationDuration:0.3f];


// Get Keyboard height and subtract the screen height by the origin of the textbox and height of text box to position textbox right above keyboard
self.scrollView.contentOffset = CGPointMake(0,keyboardBounds.size.height-([UIScreen mainScreen].bounds.size.height - commentBox.frame.origin.y - commentBox.frame.size.height));

[UIView commitAnimations];
}


文章来源: iOS: scrollView not scrolling to correct position when keyboard visible