我有一个正在使用UIWebView
查看的网页。它有一个输入形式,所以我在召唤键盘时将UIWebView
向上移动,然后在键盘被解除时将其向下移动,以便所选输入字段居中。代码如下:
-(void)keyboardWillShow:(NSNotification*) aNotification {
float offset = [self calculateYOffsetForKeyboard];
[UIView animateWithDuration:0.3f delay:0.05f options:UIViewAnimationOptionBeginFromCurrentState animations:^ {
self.web.frame = CGRectMake(webView_rect_x, offset, self.web.scrollView.frame.size.width, self.web.scrollView.frame.size.height);
} completion:nil];
}
-(void)keyboardWillHide: (NSNotification*) aNotification {
[UIView animateWithDuration:0.3f delay:0.05f options:UIViewAnimationOptionBeginFromCurrentState animations:^ {
self.web.frame = CGRectMake(webView_rect_x, 0, self.web.scrollView.frame.size.width, self.web.scrollView.frame.size.height);
} completion:nil];
}
这是奇怪的部分:当我这样做时(点击一个输入字段来召唤键盘然后点击“完成”以解除它),除了{{1的左上角四分之一外的所有内容变得无法接触。它看起来很好,完美地上下动画,正确显示内容,但中心点正下方的任何内容都不会响应触摸(即无法按下几个按钮等)。
知道为什么会这样吗?我已经注释掉了行,并确定导致问题的是“self.web.frame”:移除该移动并且工作正常。我还UIWebView
了“self.web.scrollView.frame.size.width”和“self.web.scrollView.frame.size.height”值,它们似乎正在按预期更改并返回正常。此外,NSLog
方法返回一个正确的值(它根据选择的字段而变化,但通常在-108.5左右)。
那么为什么要来回移动框架会改变视图响应触摸的能力?有什么想法吗?