0

这是正在发生的事情的一些屏幕截图。

绿色背景是滚动视图中的一个视图(即标记“内容大小”和“内容偏移量”)。

橙色是滚动视图框架。

键盘启动了……滚动视图很好地滚动了内容。

在此处输入图像描述

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

在此处输入图像描述

尽管滚动视图(橙色)似乎是正确的高度,但内容现在已经跳跃了大约 100 像素(绿色)。

我不知道是什么原因造成的 - 无论是 ios 错误还是什么(它也发生在我的设备上)。

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

- (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];
}

任何帮助或指导都会很棒,谢谢!为什么要这样做?它是一个错误 - 它是埋在我的代码中的某个地方吗?如果是的话,我找不到。这是我制作视图动画的方式的错误吗?

4

1 回答 1

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

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

于 2012-11-06T16:46:53.120 回答