Java自学者论坛

 找回密码
 立即注册

手机号码,快捷登录

恭喜Java自学者论坛(https://www.javazxz.com)已经为数万Java学习者服务超过8年了!积累会员资料超过10000G+
成为本站VIP会员,下载本站10000G+会员资源,会员资料板块,购买链接:点击进入购买VIP会员

JAVA高级面试进阶训练营视频教程

Java架构师系统进阶VIP课程

分布式高可用全栈开发微服务教程Go语言视频零基础入门到精通Java架构师3期(课件+源码)
Java开发全终端实战租房项目视频教程SpringBoot2.X入门到高级使用教程大数据培训第六期全套视频教程深度学习(CNN RNN GAN)算法原理Java亿级流量电商系统视频教程
互联网架构师视频教程年薪50万Spark2.0从入门到精通年薪50万!人工智能学习路线教程年薪50万大数据入门到精通学习路线年薪50万机器学习入门到精通教程
仿小米商城类app和小程序视频教程深度学习数据分析基础到实战最新黑马javaEE2.1就业课程从 0到JVM实战高手教程MySQL入门到精通教程
查看: 475|回复: 0

ionic 使用了 crosswalkwebview 所产生的bug 及 解决方案

[复制链接]
  • TA的每日心情
    奋斗
    2024-9-22 15:19
  • 签到天数: 795 天

    [LV.10]以坛为家III

    2050

    主题

    2108

    帖子

    72万

    积分

    管理员

    Rank: 9Rank: 9Rank: 9

    积分
    724084
    发表于 2021-5-1 05:52:24 | 显示全部楼层 |阅读模式

    一、问题产生:

    在ionic app 优化方案中,我在前之前的博文中提到使用 --crosswalkwebview;

    使用了crosswalkwebview后,app的显示及兼容效果确实很不错,虽然app大小多了20m左右,但是,当时想着,没所谓了,只要体验提升了即可;

    但是在之后,我突然发现了一个bug:

    “当ionic的键盘弹出的瞬间,整个视图会出现迷之闪动,貌似那一瞬间,整个视图被压缩得剩下一半了”

    这个bug特别是在有背景图片的视图的情况下,显得特别的恶心,也就是整个背景图片在那一瞬间被无情的压缩,显得特别难看;

    在网上各种搜索,并不能找到相应的解决方案,浑身难受~~~

     

    二、思考:

    后来自己在研究这个bug原因的时候,发现了,当app处于全屏的时候,这个bug就不复存在了;

    这个发现让我突然想到了状态栏,statusBar,肯定和它有关系;

    于是,我把状态栏设置为:

    StatusBar.overlaysWebView(true),也就是悬浮状态;

    在打包尝试的时候,确实,这个bug没有出现,因此这里,我想到了个解决方案,就是将状态栏设置成悬浮,然后,header 和 ion-content 都给个margin-top ,值为状态栏的高度;

     

    三、解决

    1、确定装了2个cordova插件

    cordova plugin add cordova-plugin-statusbar
    
    cordova plugin add ionic-plugin-keyboard
    

    2、在入口页面 index.html ,为ion-nav-view 添加 id="adjustHeightAfterKeyboard"

     

    3、在app.js里面添加一下代码

    if (window.cordova && window.cordova.plugins && window.cordova.plugins.Keyboard) {
        cordova.plugins.Keyboard.hideKeyboardAccessoryBar(true);
        cordova.plugins.Keyboard.disableScroll(true);
        //动态计算最外层 ion-nav-view 的高度,使键盘弹出时不会挡住内容
        window.addEventListener('native.keyboardshow', keyboardShowHandler);
        window.addEventListener('native.keyboardhide', keyboardHideHandler);
        var viewDom = document.getElementById('adjustHeightAfterKeyboard')
        function keyboardShowHandler(e){
            var viewHight = document.body.clientHeight - e.keyboardHeight;
            viewDom.style.height = viewHight + 'px'; 
        }
        function keyboardHideHandler(e){
            viewDom.style.height = document.body.clientHeight + 'px'; 
        }
    }
    
    if (window.StatusBar) {
      //将手机状态栏设置成悬浮
      StatusBar.overlaysWebView(true);
      StatusBar.backgroundColorByHexString("#2e2b36");
    }
    

    4、给header-bar 和ion-content 加上上边距

    .bar-header{
      box-shadow: 0 1px 1px 0 #eee;
      margin-top:23px;
    }
    .scroll-content{
      margin-top:23px;
    }
    

     

    ok,到此,假装以为可以了,运行了下,好像确实可以,但是,又出现了一个bug,心好累!!

    app 在splashscreen 消失,进入首页的时候,状态栏并不悬浮,导致了明显的空白上边距,而其他页面都不会,且从其他页面再切回来首页的时候,bug就消失了。

     

    因此,我只能又加了个判断,在首页的controller.js写上以下代码

    //修复首次进来头部有margin 的bug;(判断历史的view个数并且判断其他视图是否被点击缓存着)
    var childViews = Object.keys($ionicHistory.viewHistory().views).length; //视图里面历史view个数
    var sblingsViews = $('.tab-content').length; //tab视图的个数
    if(childViews == 1 && sblingsViews == 1){
        $scope.isFirstTimeHome = true;
    }else{
        setTimeout(function(){
          $scope.isFirstTimeHome = false;
        },300)
    }
    

     根据 $scope.isFirstTimeHome 来控制是否让margin-top 为0,也即是说如果是首次进来$scope.isFirstTimeHome =true,让margin-top为0,就解决了该bug

     

     

     

    ok,到此为止,算是解决了;

    但是我想着,是否有更好的方法能解决啊,好烦,ionic的bug真心难解决,重点是搜索不到和我这个问题类似的解决方案,一个都没有,目前只能这样解决;

    如果有更好的建议的朋友希望能给我回复下,感谢!

    哎...今天够累的,签到来了1...
    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    QQ|手机版|小黑屋|Java自学者论坛 ( 声明:本站文章及资料整理自互联网,用于Java自学者交流学习使用,对资料版权不负任何法律责任,若有侵权请及时联系客服屏蔽删除 )

    GMT+8, 2024-10-5 17:19 , Processed in 0.062242 second(s), 29 queries .

    Powered by Discuz! X3.4

    Copyright © 2001-2021, Tencent Cloud.

    快速回复 返回顶部 返回列表