键盘出现后,UIWebView会自动向上移动

时间:2014-08-18 13:51:26

标签: ios objective-c uiwebview xcode5

当键盘出现时,我的UIWebView向上移动,当键盘解除时,webview不会回到之前的位置。我已经在键盘出现之前和之后检查了webview的位置,或者解雇了。令人惊讶的是,webview的框架没有改变。但我之前和之后所看到的完全不同。

  • 键盘出现之前

before

  • 当键盘出现时,webview会向上移动

appears

  • 当键盘解除时,webview不会向下移动

after

到目前为止我所做的是应用我从其他人那里读到的以下技术

1)观察键盘通知,并在此之后正确调整

observe keyboard notification

2)更改元标记,同时添加" height = device-height"在元标记中

meta tag

3)更改webview的属性:

_webView.contentMode = UIViewContentModeScaleAspectFit;
_webView.scalesPageToFit = YES;
_webView.autoresizingMask = (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth);

但是,上述所有这些建议都不起作用。你能帮我吗?

注意:我使用iOS7,XCODE 5

2 个答案:

答案 0 :(得分:2)

UIWebView中有一个UIScrollView来管理比屏幕大的内容。当您调整UIScrollView的高度时,它通常会对其滚动位置产生影响。当您使用键盘缩小高度时,会导致内容向上滚动以保持文本字段可见(通过修改contentOffset),但是当您展开高度时,它只会在底部显示更多内容并且不会显示内容。 t将contentOffset更改回原始值。

有很多方法可以解决这个问题,每个创建可编辑文本的人都会在某个时候处理它。多年来我使用了很多,我确信可能还有更好的,我甚至都看不到。

我上次采用的方式是修改contentInset的{​​{1}}并保存原始UIScrollView,以便稍后重新填充。

设置通知

contentOffset

对通知做点什么

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillShow:)
                                             name:UIKeyboardWillShowNotification object:nil];

[[NSNotificationCenter defaultCenter] addObserver:self
                                         selector:@selector(keyboardWillHide:)
                                             name:UIKeyboardWillHideNotification object:nil];

答案 1 :(得分:0)

我解决了我的问题是

1)观察键盘何时解散:


- (void)observeKeyboard {
    [NotificationCenter addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
}

- (void)removeObserveKeyboard
{
    [NotificationCenter removeObserver:self name:UIKeyboardWillHideNotification object:nil];
}

2)当键盘即将隐藏时,我们触发js将其向上滚动。


- (void)keyboardWillHide:(NSNotification *)notification {

    [self scrollBackToTop];
}

//- Fix bug: the UIWebView Content is scroll up when the keyboard appears
-(void)scrollBackToTop {

    [_webView stringByEvaluatingJavaScriptFromString:@"window.scrollTo(0, 0);"];

}

感谢此链接:link