Якщо ви використовуєте cordova-plugin-statusbar, з параметром накладення статус бару на додаток. То ви скоріш за все стикнулися з проблемою визначення висоти цього статус бару. Нажаль стандартних методів для визначення висоти статус бару поки-що нему, але це не проблема.
Після підключення плагіну, у вас стане глобально доступна змінна StatusBar
. І ви можете подумати, що можете вирішити проблему через підключення та відключення статус бару, типу так:
document.addEventListener('deviceready', () => {
if(typeof StatusBar !== 'undefined') {
var initialHeight = document.documentElement.clientHeight;
StatusBar.overlaysWebView(false);
function resizeFunction() {
console.log(document.documentElement.clientHeight - initialHeight) // HEIGHT
window.removeEventListener('resize', resizeFunction);
StatusBar.overlaysWebView(true);
}
window.addEventListener('resize', resizeFunction);
}
});
Але тоді ви зітнкнетеся з проблемою, що при методі resume
, у вам буде не корректно опрацьовуватися document.documentElement.clientHeight
, і насправді корректного рішення на JS нема, але є на яві. Для цього вже є готовий плагін - dfocus-fm-cordova-plugin-statusbar-height.
Після підключення плагіну, нам стане доступне апі:
function getStatusbarHeight() {
window.StatusBarHeight.getValue(
function(height) {
console.log(height);
},
function(error) {
console.log(error);
}
)
}
document.addEventListener('deviceready', getStatusbarHeight, false);
На прикладі апки VueJS:
<template lang="pug">
.g(:style="{'--bartop': bartop + 'px'}")
.g__gv
RouterView(v-slot="{ Component }")
transition(name="pg" mode="out-in")
component(:is="Component")
bottomNav
</template>
<script setup>
import { RouterView } from 'vue-router'
import bottomNav from './components/frames/bottomNav.vue'
import { onMounted, ref, nextTick } from "vue"
const bartop = ref(0)
const phoneBarUpdate = async () => {
if(typeof StatusBar !== 'undefined') {
window.StatusBarHeight.getValue(val => {
bartop.value = val
})
}
}
onMounted(() => {
document.addEventListener('deviceready', phoneBarUpdate);
document.addEventListener('resume', phoneBarUpdate);
})
</script>
<style lang="stylus">
.g
padding-top 25px
padding-bottom 25px
padding-left 16px
padding-right 16px
&__gv
padding-top var(--bartop)
.pg-enter-active, .pg-leave-active
transition: all 0.15s ease;
.pg-enter-from, .pg-leave-to
opacity: 0;
</style>
Таким чином ми можемо задати відступ від шапки, який буде динамічним для будь яких пристроїв.
Якщо вас цікавить чи буде піддьоргування, то не буде, оскільки така зміна відбувається за 0.0003 секунди, але якщо ви параноїте, то можете додати анімації предзавантаження.
І не забувайте, щоб змінна кордови, або її плагінів стали доступні в додатку, ви повинні підключити її в своєму індексному файлі, кордова генерить свій файл в корені додатку:
<script type="text/javascript" src="cordova.js"></script>