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

问题描述 投票:0回答:4

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

假设我有一个

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

如何禁用

webview
的该功能,或者以某种方式使内容不向上滚动?

objective-c uiwebview keyboard focus uitextfield
4个回答
20
投票

如果您想禁用所有滚动,包括在表单字段之间导航时的自动滚动,设置

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

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

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

谢谢。


0
投票

最初,我希望在输入字段(在我的例子中是评论部分)聚焦时阻止我的网络视图放大。整个视图会自动放大,让一切都变得不正常。 我成功地做到了这一点,同时我也让网络视图停止向上滚动并避开软键盘:

//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.

0
投票

斯威夫特5

zoom and scroll hold

class WebviewScrollViewDelegate: NSObject, UIScrollViewDelegate {
    var webview: WKWebView?
    
    func scrollViewWillBeginZooming(_ scrollView: UIScrollView, with view: UIView?) {
        scrollView.pinchGestureRecognizer?.isEnabled = false
    }
    func scrollViewDidScroll(_ scrollView: UIScrollView) {
        if let webview = webview {
            scrollView.bounds = webview.bounds
            scrollView.zoomScale = webview.pageZoom
        }
    }
}

class MyWebview {
    let webviewScrollViewDelegate = WebviewScrollViewDelegate()

    webview.scrollView.delegate = webviewScrollViewDelegate
    webviewScrollViewDelegate.webview = webview
}
© www.soinside.com 2019 - 2024. All rights reserved.