Files
coach-ios/capacitor.config.ts
Sylvain Bettinelli 1393cc3dcf fix(ios26): contentInset 'never' (default) au lieu de 'always'
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.
2026-05-18 15:27:15 +00:00

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;