知识教程 | 优化状态栏沉浸式效果

沉浸式状态栏是让开发者尤为是Android开发者很头疼的问题,耗费开发者不少精力去校验代码在各个系统版本、各个机型上是否有效,今天这篇教程就跟你们分享优化初始化状态栏沉浸式效果的方法。html

使用APICloud时,参照社区源码,初始化状态栏沉浸式,像这样去编写:android

apiready = function() {
   var header = $api.byId('header');
   $api.fixStatusBar(header);

}ios

有的开发者可能会遇到在Android机器上,导航栏有卡顿效果,仔细查找缘由,打开api.js 找到fixStatusBar方法,你会发现是api.js里面根据手机型号等条件操做dom进行适配,方法内还使用了扩展的api对象获取数据,因此该方法必须在apireader内执行,卡顿效果就是加载api对象的时间,apiready执行变晚。api

下面这个方法分享给你们,帮助大家解决卡顿问题。dom

初始化程序时,index.html 文件中 apireader 内执行:优化

function initHeaderH(){
   $api.setStorage('SYSTEMTYPE',api.systemType);
   $api.setStorage('SYSTEMVERSION',api.systemVersion);
   $api.setStorage('FULLSCREEN',api.fullScreen);
   $api.setStorage('IOS7STATUSBARAPPEARANCE',api.iOS7StatusBarAppearance);
}htm

在打开其余window时,不在apiready内调用,提早处理沉浸式效果,能够解决卡顿问题。对象

var header = $api.byId('header');
fixStatusBar_API(header);
apiready = function() {};教程

写到经常使用方法内:开发

//IOS设置bar
function fixIos7Bar_API(el){
   if(!$api.isElement(el)){
       console.warn('$api.fixIos7Bar Function need el param, el param must be DOM Element');
       return;
   }
   var strDM = $api.getStorage('SYSTEMTYPE');
   if (strDM == 'ios') {
       var strSV = $api.getStorage('SYSTEMVERSION');
       var numSV = parseInt(strSV,10);
       var fullScreen = $api.getStorage('FULLSCREEN');
       var iOS7StatusBarAppearance = $api.getStorage('IOS7STATUSBARAPPEARANCE');
       if (numSV >= 7 && fullScreen == 'false' && iOS7StatusBarAppearance) {
           el.style.paddingTop = '20px';
       }
   }
}
function fixStatusBar_API(el){
   if(!$api.isElement(el)){
       console.warn('$api.fixStatusBar Function need el param, el param must be DOM Element');
       return;
   }
   var sysType = $api.getStorage('SYSTEMTYPE');
   if(sysType == 'ios'){
       fixIos7Bar_API(el);
   }else if(sysType == 'android'){
       var ver = $api.getStorage('SYSTEMVERSION');
       ver = parseFloat(ver);
       if(ver >= 4.4){
           el.style.paddingTop = '25px';
       }
   }
};

本文做者:APICloud 版主 yuyangzhao