diff --git a/SodaLive/Sources/Live/Room/Detail/LiveDetailView.swift b/SodaLive/Sources/Live/Room/Detail/LiveDetailView.swift index 2afd707..6397934 100644 --- a/SodaLive/Sources/Live/Room/Detail/LiveDetailView.swift +++ b/SodaLive/Sources/Live/Room/Detail/LiveDetailView.swift @@ -10,7 +10,7 @@ import Kingfisher struct LiveDetailView: View { - @ObservedObject var viewModel = LiveDetailViewModel() + @StateObject private var viewModel = LiveDetailViewModel() @State private var isExpandParticipantArea = false @State private var isShowCancelPopup = false diff --git a/docs/20260324_라이브상세복귀시DIM만보이는문제수정.md b/docs/20260324_라이브상세복귀시DIM만보이는문제수정.md new file mode 100644 index 0000000..3bcd31e --- /dev/null +++ b/docs/20260324_라이브상세복귀시DIM만보이는문제수정.md @@ -0,0 +1,37 @@ +# 20260324 라이브 상세 복귀 시 DIM만 보이는 문제 수정 계획 + +## 작업 체크리스트 +- [x] 라이브 상세 복귀 시 상세 패널 비노출 원인 분석 +- [x] `LiveDetailView` 복귀 시점 표시 상태 복원 로직 구현 +- [x] 원인과 수정안 문서화 +- [x] 진단/빌드/테스트 검증 수행 및 기록 + +## 원인 분석 +- `LiveDetailView`가 자체 `LiveDetailViewModel`을 `@ObservedObject`로 생성하고 있었다. +- 이 뷰는 `ContentView`의 전역 오버레이(`appState.liveDetailSheet`)로 표시되며, 채널 보기 이동(`AppState.shared.setAppStep(step: .creatorDetail)`)이나 앱 활성/비활성 전환 시 부모 뷰가 다시 그려진다. +- 재그리기 시 `@ObservedObject` 인스턴스가 재생성되면 `showDetail`이 기본값(`false`)로 돌아가고, 하단 패널은 `offset(y: viewModel.showDetail ? 0 : proxy.size.height * 0.9)` 때문에 화면 밖으로 내려간다. +- DIM 레이어(`Color.black.opacity(0.7)`)는 `showDetail`과 무관하게 항상 렌더링되므로, 결과적으로 "상세 패널은 사라지고 DIM만 보이는" 상태가 발생한다. + +## 수정안 +- `SodaLive/Sources/Live/Room/Detail/LiveDetailView.swift` + - `@ObservedObject var viewModel = LiveDetailViewModel()` + - → `@StateObject private var viewModel = LiveDetailViewModel()`로 변경. +- 상세 시트를 소유하는 뷰에서 ViewModel 인스턴스를 유지하도록 바꿔, 페이지 이동/복귀 및 라이프사이클 변화 시에도 `showDetail` 상태가 초기화되지 않도록 했다. +- 기존 UI 구조, 애니메이션, 닫기 로직은 변경하지 않고 상태 소유 방식만 최소 수정했다. + +## 검증 기록 +### 1차 검증 (2026-03-24) +- 무엇/왜/어떻게: + - 무엇: `LiveDetailView`의 ViewModel 소유 방식을 `@StateObject`로 변경. + - 왜: 복귀 시 `showDetail` 초기화로 패널이 숨겨지고 DIM만 남는 문제를 방지하기 위함. + - 어떻게: 코드 수정 후 진단/빌드/테스트 엔트리 포인트 명령으로 회귀 여부 확인. +- 실행 명령: + - `lsp_diagnostics(file: SodaLive/Sources/Live/Room/Detail/LiveDetailView.swift)` + - `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" -configuration Debug build` + - `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive" test` + - `xcodebuild -workspace "SodaLive.xcworkspace" -scheme "SodaLive-dev" -configuration Debug build` +- 결과: + - `lsp_diagnostics`: `No such module 'Kingfisher'` 1건(현재 SourceKit 환경 제약으로 인한 기존 이슈). + - `SodaLive` 빌드: `** BUILD SUCCEEDED **` + - `SodaLive` 테스트: `Scheme SodaLive is not currently configured for the test action.` + - `SodaLive-dev` 빌드: `** BUILD SUCCEEDED **`