iOS 12.0 WebView键盘弹出,关闭后界面没有回收的问题

iOS 12.0 WebView键盘弹出,关闭后界面没有回收的问题

背景

公司有人反馈,iOS 12.0的手机上,H5页面有个地方键盘弹出了,关闭之后,再次点击输入框,没有反应了,其实是界面上移了之后,没有回到原来的位置。所以导致再次点击输入框时,没有反应

修改

最开始,修改方法时,添加iOS 12.0之后,设置 contentInsetAdjustmentBehaviorUIScrollViewContentInsetAdjustmentAutomatic,设置了之后,键盘的问题解决了,但是又出现新的问题,iPhone X系列的全面屏的适配,之前H5页面body写的height:100%的地方,会显示高度不对。

    if (@available(iOS 12.0, *)) {
        self.web.scrollView.contentInsetAdjustmentBehavior = UIScrollViewContentInsetAdjustmentAutomatic;
    }

于是笔者再次尝试修改:

参考iOS12 WKWebView出现input 键盘页面上顶不下移解决方法,在H5界面监听键盘弹出和收起,在收起时,对webview的scrollview做偏移处理,设置后,发现对笔者的项目来说仍旧不生效,笔者的项目同一个网页上有多个可输入的地方,且有在弹出框输入的操作。

故而再次修改:

笔者发现,有人给出参考方法,由H5端,监听键盘弹起和回收,然后进行处理,但是如果让H5处理,需要每个业务的H5都要单独处理,所以笔者就想,由原生监听键盘收起的通知,然后调用js的方法,代码如下:

viewDidLoad中,针对版本处理进行处理,添加键盘回收的通知

    if (zDeviceVersion.floatValue >= 12.0 && zDeviceVersion.floatValue < 13.0) { // 兼容12.0的系统问题
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) name:UIKeyboardWillHideNotification object:nil];
    }

然后在通知的方法中实现,调用JS处理方法

- (void)keyboardWillHide:(NSNotification *)note {
    NSString *jsStr =
    @"setTimeout(() => {const scrollHeight = document.documentElement.scrollTop || document.body.scrollTop || 0;window.scrollTo(0, Math.max(scrollHeight - 1, 0));}, 300);";
    [self.web evaluateJavaScript:jsStr completionHandler:nil];
}

参考

iOS12 WKWebView出现input 键盘页面上顶不下移解决方法

ios 微信webview在键盘关闭后,没有自动回退页面

本站文章资源均来源自网络,除非特别声明,否则均不代表站方观点,并仅供查阅,不作为任何参考依据!
如有侵权请及时跟我们联系,本站将及时删除!
如遇版权问题,请查看 本站版权声明
THE END
分享
二维码
海报
iOS 12.0 WebView键盘弹出,关闭后界面没有回收的问题
公司有人反馈,iOS 12.0的手机上,H5页面有个地方键盘弹出了,关闭之后,再次点击输入框,没有反应了,其实是界面上移了之后,没有回到原来的位置。所以导致再次...
<<上一篇
下一篇>>