Cause root du bug nav bar qui flash en bas pendant le scroll iOS 26 : ios.contentInset = 'always' faisait que iOS WKWebView ajustait dynamiquement le contentInset pendant le scroll → window.innerHeight shrinkait de 902 → 868 (perte safe-area-inset-bottom = 34px) → la nav `position: fixed; bottom: 0` suivait le shrink → flash visible. Diagnostic empirique 2026-05-18 via debug overlay JS qui montrait : - État repos : innerH=902, nav.bottom=902 ✅ - État scroll : innerH=868, nav.bottom=868 ❌ (34px plus haut) Sources doc officielles vérifiées : - capacitorjs.com/docs/config : default Capacitor iOS = 'never' - developer.apple.com/documentation/uikit/uiscrollview/ contentinsetadjustmentbehavior : 'never' = aucun ajustement automatique → évite le shrink dynamique → recommandé pour web apps fullscreen 'always' = force ajustement sur tous axes → cause de notre shrink Le CSS coach_sportif gère déjà manuellement env(safe-area-inset-*) dans critical.css (top, bottom, left, right). Combiné avec StatusBar.overlaysWebView=false (status bar a son espace dédié, n'overlay pas le WebView), tout reste correct sans contentInset. Bump build requis côté Mac avant rebuild TestFlight. Workaround JS RAF loop (commit d8b928a) conservé en safety net : quand contentInset='never' tient sa promesse, innerHeight est stable, maxInnerH-h=0, pas de transform appliqué. Si jamais iOS 26 régresse, le workaround prend le relais.
53 lines
1.4 KiB
TypeScript
53 lines
1.4 KiB
TypeScript
import type { CapacitorConfig } from '@capacitor/cli';
|
|
|
|
const config: CapacitorConfig = {
|
|
appId: 'ch.hypnotruck.coach',
|
|
appName: 'Coach Hypnotruck',
|
|
webDir: 'www',
|
|
|
|
server: {
|
|
url: 'https://coach.hypnotruck.ch',
|
|
cleartext: false,
|
|
androidScheme: 'https',
|
|
},
|
|
|
|
ios: {
|
|
// contentInset: 'never' (default Capacitor) au lieu de 'always'.
|
|
// 'always' faisait que iOS WKWebView ajuste dynamiquement le
|
|
// contentInset pendant le scroll → window.innerHeight shrinkait
|
|
// de 902 → 868 (perte safe-area-inset-bottom) → bottom nav remontait.
|
|
// Diagnostic 2026-05-18 via debug overlay JS.
|
|
contentInset: 'never',
|
|
scrollEnabled: true,
|
|
limitsNavigationsToAppBoundDomains: false,
|
|
// Fond noir natif : évite le flash blanc du WebView entre 2 pages
|
|
backgroundColor: '#000000',
|
|
},
|
|
|
|
plugins: {
|
|
SplashScreen: {
|
|
launchShowDuration: 1500,
|
|
launchAutoHide: true,
|
|
backgroundColor: '#000000',
|
|
showSpinner: false,
|
|
splashImmersive: false,
|
|
},
|
|
StatusBar: {
|
|
// App dark : style LIGHT = icônes/texte status bar en blanc sur fond noir
|
|
style: 'LIGHT',
|
|
backgroundColor: '#000000',
|
|
overlaysWebView: false,
|
|
},
|
|
PushNotifications: {
|
|
presentationOptions: ['badge', 'sound', 'alert'],
|
|
},
|
|
LocalNotifications: {
|
|
smallIcon: 'ic_stat_icon_config_sample',
|
|
iconColor: '#488AFF',
|
|
sound: 'beep.wav',
|
|
},
|
|
},
|
|
};
|
|
|
|
export default config;
|