设置UIWebView内容时不显示键盘时移动

时间:2013-04-10 12:46:46

标签: objective-c uiwebview keyboard focus uitextfield

我做了足够多的研究,但找不到我的问题的答案。

假设我有一个webView我有一些文本字段,其中一些放在屏幕的底部,这样当键盘出现时它应该隐藏那些字段。键盘出现后,webView的内容会向上滑动,以使这些字段可见。问题是我不要希望内容向上滑动。

问题是:如何禁用webview的该功能,或以某种方式使内容不向上滚动。???

谢谢,任何帮助将不胜感激。

4 个答案:

答案 0 :(得分:18)

如果要禁用所有滚动,包括在表单字段之间导航时自动滚动,设置webView.scrollView.scrollEnabled=NO并不能完全覆盖所有内容。这会停止正常的点击并拖动滚动,但不会在您在Web表单中导航时自动进行场景滚动。

此外,观看UIKeyboardWillShowNotification会阻止您在键盘出现时滚动,但如果键盘已经在编辑其他表单字段,则无法执行任何操作。

以下是三个简单步骤中防止所有滚动的方法:

1)创建UIWebView后,禁用正常滚动:

myWebView.scrollView.scrollEnabled = NO;

2)然后将您的视图控制器注册为scrollView的委托:

myWebView.scrollView.delegate = self;

(并确保将<UIScrollViewDelegate>添加到您的班级@interface定义中,以防止编译器警告)

3)捕获并撤消所有滚动事件:

// UIScrollViewDelegate method
- (void)scrollViewDidScroll:(UIScrollView *)scrollView {
    scrollView.bounds = myWebView.bounds;
}

答案 1 :(得分:0)

我认为this class可以帮助解决您的问题。它会向上滚动内容,所以如果屏幕底部有文本字段,它会将其移到键盘上方。

答案 2 :(得分:0)

我为我找到了解决方案。我向上滚动后再向下滚动它。 首先,我通过添加观察者来捕获通知UIKeyboardWillShowNotification [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillShow:) name:UIKeyboardWillShowNotification object:nil]; 然后实现方法:

-(void)keyboardWillShow:(NSNotification*)aNotification{
NSDictionary* info = [aNotification userInfo];
float kbHeight = [[NSNumber numberWithFloat:[[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size.height]floatValue];
float kbWidth = [[NSNumber numberWithFloat:[[info objectForKey:UIKeyboardFrameBeginUserInfoKey] CGRectValue].size.width]floatValue];
BOOL keyboardIsVisible=[self UIKeyboardIsVisible];
//Check orientation and scroll down webview content by keyboard size
if(kbWidth==[UIScreen mainScreen].bounds.size.width){
    if (!keyboardIsVisible) {
        [[chatView scrollView] setContentOffset:CGPointMake(0, -kbHeight+10) animated:YES];
    } //If is landscape content scroll up is about 113 px so need to scroll down by 113
}else if (kbHeight==[UIScreen mainScreen].bounds.size.height){
    if (!keyboardIsVisible) {
        [[chatView scrollView] setContentOffset:CGPointMake(0, -113) animated:YES];
    }
}
}

这不是我要求的,但帮助我解决了我的问题。

感谢。

答案 3 :(得分:0)

最初,我只是希望在输入字段(在我的情况下为“评论”部分)集中显示时,阻止Web视图放大。整个视图将自动放大,并且一切尽在其中。 我设法做到了这一点,与此同时,我也使Webview停止了向上滚动,也不再妨碍软键盘了:

//Stop the webview from zooming in when the comments section is used.
UIScrollView *scrollView = [_webView.subviews objectAtIndex:0];
scrollView.delegate = self;

//_webView.scrollView.delegate = self; //for versions newer than iOS5.