当键盘出现时,我的UIWebView向上移动,当键盘解除时,webview不会回到之前的位置。我已经在键盘出现之前和之后检查了webview的位置,或者解雇了。令人惊讶的是,webview的框架没有改变。但我之前和之后所看到的完全不同。
到目前为止我所做的是应用我从其他人那里读到的以下技术:
1)观察键盘通知,并在此之后正确调整
2)更改元标记,同时添加" height = device-height"在元标记中
3)更改webview的属性:
_webView.contentMode = UIViewContentModeScaleAspectFit; _webView.scalesPageToFit = YES; _webView.autoresizingMask = (UIViewAutoresizingFlexibleHeight | UIViewAutoresizingFlexibleWidth);
但是,上述所有这些建议都不起作用。你能帮我吗?
注意:我使用iOS7,XCODE 5
答案 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