【问题标题】:Set UIWebView Content not to move when keyboard is shown设置 UIWebView 内容在显示键盘时不移动
【发布时间】:2013-04-02 07:38:54
【问题描述】:

我已经进行了足够大的研究,但找不到我的问题的答案。

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

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

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

【问题讨论】:

    标签: objective-c uiwebview keyboard focus uitextfield


    【解决方案1】:

    如果您想禁用所有滚动,包括在表单域之间导航时的自动滚动,设置webView.scrollView.scrollEnabled=NO 并不能完全涵盖所有内容。这会停止正常的点击和拖动滚动,但不会在您浏览 Web 表单时自动将字段滚动到视图中。

    此外,注意UIKeyboardWillShowNotification 可以让您防止滚动当键盘出现时,但如果键盘已经启动以编辑不同的表单字段,这将无济于事。

    以下是如何通过三个简单的步骤来防止所有滚动:

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

    myWebView.scrollView.scrollEnabled = NO;
    

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

    myWebView.scrollView.delegate = self;
    

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

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

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

    【讨论】:

    • 感谢您提供有趣的信息,但这实际上与问题无关,此外我已经从 Javascript 解决了它。
    • 我发现这确实是您问题的答案。我希望您发布自己的解决方案。
    • 这个解决方案解决了我的问题我喜欢“将字段带入视图滚动”这个短语
    • 谢谢!为我的目的工作。一个问题,Richard,您能否提供有关如何将 UIScrollViewDelegate 添加到@interface 的详细信息?
    • @Garnik 你的javascript解决方案是什么?你能发表你的答案吗?
    【解决方案2】:

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

    【讨论】:

    • 很抱歉,您没有理解我的问题。我希望我的文本字段留在原处,而不是向上移动。
    【解决方案3】:

    我找到了适合我的解决方案。我只是在向上滚动后再次向下滚动。 首先我通过添加观察者来捕捉通知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];
        }
    }
    }
    

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

    谢谢。

    【讨论】:

      【解决方案4】:

      最初我希望在输入字段(在我的例子中是 cmets 部分)被聚焦时阻止我的 webview 放大。整个视图会自动放大,并把所有东西都弄乱了。 我设法做到了这一点,同时我也让 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.
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2012-06-03
        • 2014-08-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-10-19
        • 2021-06-18
        • 1970-01-01
        相关资源
        最近更新 更多