`

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

    博客分类:
  • ios
阅读更多

1.如果是H5中只有一个input 参考 https://juejin.im/post/5bfcbaccf265da615e0526ca

/// 监听将要弹起
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardShow) name:UIKeyboardWillShowNotification object:nil];
/// 监听将要隐藏
[[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardHidden) name:UIKeyboardWillHideNotification object:nil];
/** 键盘谈起屏幕偏移量 */
@property (nonatomic, assign) CGPoint keyBoardPoint;
#pragma mark - addObserverKeyboard
/// 键盘将要弹起
- (void)keyBoardShow {
    CGPoint point = self.webView.scrollView.contentOffset;
    self.keyBoardPoint = point;
}
/// 键盘将要隐藏
- (void)keyBoardHidden {
    self.webView.scrollView.contentOffset = self.keyBoardPoint;
}

 2.如果有多个input 就会出现很严重的问题,页面会下拉回去的动作,用户体验很不好。尝试了多种方法,找到了一种解决方案。

@property (nonatomic,assign) BOOL keyBoardHide;
        /// 监听将要弹起
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardShow) name:UIKeyboardWillShowNotification object:nil];
        /// 监听将要隐藏
        [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyBoardHidden:) name:UIKeyboardWillHideNotification object:nil];
#pragma mark - addObserverKeyboard
/ 键盘将要弹起
- (void)keyBoardShow {
    self.keyBoardHide = NO;
}
/ 键盘将要隐藏
- (void)keyBoardHidden:(NSNotification *)notification{
   self.keyBoardHide = YES;
    CGFloat actionDelayTime = 0.04;
    __block double pianYi = self.webView.scrollView.contentOffset.y + DEVICE_HEIGHT - self.webView.scrollView.contentSize.height;
    __block CGPoint ontentOffset = CGPointMake(0, self.webView.scrollView.contentSize.height - DEVICE_HEIGHT);
    dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)(actionDelayTime * NSEC_PER_SEC)),dispatch_get_global_queue(0, 0), ^{
        if (self.keyBoardHide) {
            NSDictionary *userInfo = notification.userInfo;
            // 动画的持续时间
            double duration = [userInfo[UIKeyboardAnimationDurationUserInfoKey] doubleValue];
            if (@available(iOS 12.0, *)) {
                  dispatch_after(dispatch_time(DISPATCH_TIME_NOW, (int64_t)((duration-actionDelayTime) * NSEC_PER_SEC)), dispatch_get_main_queue(), ^{
                      [UIView animateWithDuration:(duration-actionDelayTime) animations:^{
                          UIScrollView *scrollView = [self.webView scrollView];
                          if (pianYi > 0) {
                              [scrollView setContentOffset:ontentOffset];
                          }
                      }];
                  });
             }
        }
    }); 
}

 试过了,超好用

分享到:
评论

相关推荐

    iOS11 WKWebView 无法加载内容的解决方法

    iOS11 WKWebView 无法加载内容的解决方法 WKWebView 是 iOS 中的一个网页视图控件,自 iOS 8 开始引入,取代了 UIWebView。WKWebView 提供了更好的性能和安全性,但是在 iOS 11 中,却出现了加载内容失败的问题。...

    解决IOS端微信H5页面软键盘弹起后页面下方留白的问题

    前言:微信H5项目,ios端出现了软键盘输完隐藏后页面不会回弹,下方会有一大块留白 最近微信和ios都有版本升级,不知道是哪边升级造成的,但是经过测试,软键盘收起后,再滚动一下页面,下面的留白就会消失。所以...

    iOS下Html页面中input获取焦点弹出键盘时挡住input解决方案

    iOS下Html页面中input获取焦点弹出键盘时挡住input解决方案 兼容ios8 ios9 ios 10

    ios-WKWebView.zip

    在iOS开发中,WKWebView是苹果提供的一种用于展示网页内容的组件,它是UIWebView的替代品,具有更好的性能和安全性。本项目“ios-WKWebView.zip”似乎是一个示例,旨在模仿“今天头条”这款应用的网页加载和交互功能...

    ios-WKWebView的使用.zip

    本教程将详细介绍如何在iOS应用中使用WKWebView,包括其基本使用方法、JavaScript与Objective-C(以下简称OC)的交互以及实现网页内容加载进度条的技巧。 首先,WKWebView的基本使用: 1. 引入库:在项目中引入...

    iOS防止在WKWebView中打开Universal Link的方法

    综上所述,防止在WKWebView中打开Universal Link的方法主要涉及禁用自动处理、自定义URL决策、替换URL、重定向和JavaScript交互。选择哪种策略取决于你的具体需求和应用环境。需要注意的是,这些方法可能会影响用户...

    iOS WKWebView和UIWebView自适应高度

    在iOS应用开发中,UIWebView和WKWebView是两种常见的用于展示网页内容的控件。它们允许开发者在原生应用中嵌入HTML、CSS和JavaScript代码,实现丰富的交互体验。本篇文章将深入探讨如何在iOS应用中,特别是针对...

    对iOS系统WKWebView组件的基本封装,避免一些常见的坑。.zip

    操作系统:LInux、IOS、树莓派、安卓开发、微机操作系统、网络操作系统、分布式操作系统等。此外,还有嵌入式操作系统、智能操作系统等。 网络与通信:数据传输、信号处理、网络协议、网络与通信硬件、网络安全网络...

    iOS WKWebView和UIWebView高度自适应

    在iOS应用开发中,UIWebView和WKWebView是两种常见的用于展示网页内容的组件。它们都是UIKit框架的一部分,允许开发者在iOS应用中嵌入HTML、CSS和JavaScript内容。然而,这两个组件在性能、安全性和功能上有显著的...

    iOS中WKWebView白屏问题的分析与解决

    在iOS开发中,WKWebView是苹果为替换旧有的UIWebView而推出的新一代网页视图控件,它在性能、稳定性以及内存管理上有着显著的提升。然而,开发者在实际使用过程中,可能会遇到WKWebView白屏的问题,这通常会给用户...

    IOS WKWebView无法打开本地资源js/css/image.rar

    IOS WKWebView无法打开本地资源JS/CSS/Image,解决跨域问题 本人亲自编写,可以加载本地网站,如cocos creator发布的网页直接在本地打开 能够正确加载js,css/image等

    iOS11 WKWebView问题汇总

    iOS11 WKWebView问题汇总 WKWebView是iOS中的一种基于WebKit的浏览器控件,自iOS 8起,WKWebView...WKWebView在iOS 11中存在一些问题,但是通过使用正确的解决方法,可以解决这些问题,提高WKWebView的稳定性和性能。

    ios WKWebView与JS交互实战技巧

    ### iOS WKWebView与JS交互实战技巧 #### 一、引言 随着移动互联网技术的发展,混合应用(Hybrid Apps)成为一种重要的应用开发方式。它结合了原生应用的高性能和Web应用的灵活性,其中最关键的技术之一就是浏览器...

    ios-WKWebView 的加载 、js交互的使用.zip

    在iOS开发中,WKWebView是苹果提供的一种用于展示网页内容的组件,它是UIWebView的替代品,具有更好的性能和安全性。本教程将深入探讨WKWebView的加载机制以及如何实现JavaScript与Objective-C/Swift的交互。 一、...

    ios-获取WKWebView加载完成之后的高度.zip

    获取WKWebView的高度,注意在控制器 销毁后,为防止内存泄漏,需要将WKUserContentController *userCC = self.wkConfig.userContentController; //JS调用OC 添加处理脚本 [userCC addScriptMessageHandler:self ...

    解决iOS下无法触发focus事件的问题

    "解决iOS下无法触发focus事件的问题" 在移动端开发中, focus 事件是一个非常重要的事件,它可以帮助开发者更好地控制用户的输入行为。但是在iOS平台上,触发 focus 事件却是一个非常棘手的问题。本文将为大家分享...

    iOS使用WKWebView加载HTML5不显示屏幕宽度的问题解决

    通过JavaScript将这个meta标签添加到页面的head部分,确保页面在加载时就设置了正确的视口,从而解决了页面宽度不自适应的问题。 WKWebView提供的WKWebViewConfiguration对象用于配置WKWebView实例。在这个配置对象...

Global site tag (gtag.js) - Google Analytics