From 1393cc3dcf29045e6d107bf9e3ade41c82a13eef Mon Sep 17 00:00:00 2001 From: Sylvain Bettinelli Date: Mon, 18 May 2026 15:27:15 +0000 Subject: [PATCH] fix(ios26): contentInset 'never' (default) au lieu de 'always' MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 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. --- capacitor.config.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/capacitor.config.ts b/capacitor.config.ts index 8790349..9f96f66 100644 --- a/capacitor.config.ts +++ b/capacitor.config.ts @@ -12,7 +12,12 @@ const config: CapacitorConfig = { }, ios: { - contentInset: 'always', + // 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