diff --git a/android/app/src/main/java/kr/sblog/slimbudget/MainActivity.java b/android/app/src/main/java/kr/sblog/slimbudget/MainActivity.java
index 5a66b49..77742bc 100644
--- a/android/app/src/main/java/kr/sblog/slimbudget/MainActivity.java
+++ b/android/app/src/main/java/kr/sblog/slimbudget/MainActivity.java
@@ -1,6 +1,11 @@
package kr.sblog.slimbudget;
import android.os.Bundle;
+import android.view.View;
+
+import androidx.core.graphics.Insets;
+import androidx.core.view.ViewCompat;
+import androidx.core.view.WindowInsetsCompat;
import com.getcapacitor.BridgeActivity;
@@ -9,5 +14,17 @@ public class MainActivity extends BridgeActivity {
public void onCreate(Bundle savedInstanceState) {
registerPlugin(CardNotifPlugin.class);
super.onCreate(savedInstanceState);
+
+ // targetSdk 35+ 의 에지투에지 강제 환경에서 웹뷰가 상태바/소프트키(시스템 내비) 뒤로
+ // 깔리는 것을 방지한다. 시스템 바 인셋만큼 웹뷰에 패딩을 줘서 콘텐츠(하단 고정 내비 포함)가
+ // 항상 안전 영역 안에 오도록 한다. (CSS env(safe-area-*) 가 기기별로 0 을 반환하는 문제 회피)
+ final View webView = getBridge().getWebView();
+ if (webView != null) {
+ ViewCompat.setOnApplyWindowInsetsListener(webView, (v, insets) -> {
+ Insets bars = insets.getInsets(WindowInsetsCompat.Type.systemBars());
+ v.setPadding(bars.left, bars.top, bars.right, bars.bottom);
+ return insets;
+ });
+ }
}
}
diff --git a/src/App.vue b/src/App.vue
index e3b9508..661ce1e 100644
--- a/src/App.vue
+++ b/src/App.vue
@@ -6,7 +6,6 @@ import AppSidebar from '@/components/layout/AppSidebar.vue'
import AppBottomNav from '@/components/layout/AppBottomNav.vue'
import LoginModal from '@/components/LoginModal.vue'
import SignupModal from '@/components/SignupModal.vue'
-import ChangePasswordModal from '@/components/ChangePasswordModal.vue'
import WebOnlyNotice from '@/components/WebOnlyNotice.vue'
import { Capacitor } from '@capacitor/core'
import { useAuthStore } from '@/stores/auth'
@@ -54,7 +53,6 @@ watch(() => route.fullPath, () => ui.closeSidebar())
-
@@ -81,6 +79,8 @@ watch(() => route.fullPath, () => ui.closeSidebar())
.layout-body {
grid-area: body;
padding: 1.5rem 2rem;
+ /* 하단 고정 내비(56px)+소프트키 인셋만큼 비워 콘텐츠가 가리지 않게 */
+ padding-bottom: calc(56px + env(safe-area-inset-bottom, 0) + 1rem);
overflow: auto;
}
@@ -127,6 +127,7 @@ watch(() => route.fullPath, () => ui.closeSidebar())
}
.layout-body {
padding: 1rem;
+ padding-bottom: calc(56px + env(safe-area-inset-bottom, 0) + 1rem);
}
}
diff --git a/src/components/layout/AppBottomNav.vue b/src/components/layout/AppBottomNav.vue
index 7908b80..b014907 100644
--- a/src/components/layout/AppBottomNav.vue
+++ b/src/components/layout/AppBottomNav.vue
@@ -30,51 +30,52 @@ function goSettings() {