动画滚动视图高度 - 内容在动画之前突然跳起

Tho*_*son 0 animation uiscrollview ios

以下是正在发生的事情的截图.

绿色背景是滚动视图中的视图(即标记"内容大小"和"内容偏移").

橙色是滚动视图框架.

键盘已启动...滚动视图可以很好地滚动内容.

在此输入图像描述

现在我点击文本字段,键盘开始隐藏

在此输入图像描述

虽然滚动视图(橙色)似乎是正确的高度,但内容现在已经上升了约100px(绿色).

我不知道造成这种情况的原因是 - 它是一个ios bug还是什么(它也发生在我的设备上).

这是根据键盘显示/隐藏的时间调整视图大小的代码.

- (void)keyboardWillShow:(NSNotification *)notif {
    [self.mainScrollView setAutoresizesSubviews:NO];
    // get the scroll view frame size
    CGRect frame = [self.mainScrollView frame];
    frame.size.height = self.view.frame.size.height-216;

    [UIView beginAnimations:@"scrollViewAnimations" context:nil];
    [UIView setAnimationDuration:0.3];
    [self.mainScrollView setFrame:frame];
    [UIView commitAnimations];

    // add tap gesture recognizer
    _tap = [[UITapGestureRecognizer alloc] initWithTarget:self action:@selector(_dismissKeyboard:)];
    [_tap setDelegate:self];
    [self.view addGestureRecognizer:_tap];
}

- (void)keyboardWillHide:(NSNotification *)notif {
    CGRect frame = [self.mainScrollView frame];
    frame.size.height = self.view.frame.size.height;

    [UIView beginAnimations:@"scrollViewAnimations" context:nil];
    [UIView setAnimationDuration:0.3];
    [self.mainScrollView setFrame:frame];
    [UIView commitAnimations];

    [self.view removeGestureRecognizer:_tap];
}
Run Code Online (Sandbox Code Playgroud)

任何帮助或指导都会很棒,谢谢!它为什么这样做?这是一个错误 - 它是否隐藏在我的代码中的某个地方?如果是的话,我找不到它.这与我正在观看动画的方式有误吗?

小智 5

这是我对RubyMotion中类似问题的解决方案:

def keyboardWillShow(notification)
  point = searchBar.convertPoint(searchBar.frame.origin, toView:tableView)
  tableView.setContentOffset(point, animated: true)
end

def keyboardWillHide(notification)
  info = notification.userInfo
  duration = info.objectForKey(UIKeyboardAnimationDurationUserInfoKey)

  UIView.beginAnimations(nil, context:nil)
  UIView.setAnimationDuration(duration)
  tableView.setContentOffset([0,0], animated: false)
  UIView.commitAnimations
end
Run Code Online (Sandbox Code Playgroud)

这里的想法是你不想改变框架,而是想要调整UIScrollView的内容偏移量