From bf330465a953c45e0d65d99b534bfa76b1371216 Mon Sep 17 00:00:00 2001 From: JaeSunEo Date: Thu, 22 Jan 2026 04:09:22 +0900 Subject: [PATCH 01/10] =?UTF-8?q?fix/=20#151=20[=EB=84=A4,=20=EC=9E=88?= =?UTF-8?q?=EC=96=B4=EC=9A=94=20btn]=EA=B3=BC=20[=EC=95=84=EC=A7=81=20?= =?UTF-8?q?=EC=97=86=EC=96=B4=EC=9A=94=20btn]=20=E2=86=92=20=EC=88=9C?= =?UTF-8?q?=EC=84=9C=20=EB=92=A4=EB=B0=94=EB=80=9C=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Calendar/SelectTreatment/SelectTreatmentViewModel.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/SelectTreatment/SelectTreatmentViewModel.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/SelectTreatment/SelectTreatmentViewModel.swift index 1f56165a..36801fc2 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/SelectTreatment/SelectTreatmentViewModel.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/SelectTreatment/SelectTreatmentViewModel.swift @@ -8,8 +8,8 @@ import SwiftUI enum TreatmentSelectionState: CaseIterable { - case notSelected case available + case notSelected var title: String { switch self { From 954c2c241275b89cd31a5a5c3ae64482515dc2f0 Mon Sep 17 00:00:00 2001 From: JaeSunEo Date: Thu, 22 Jan 2026 04:22:27 +0900 Subject: [PATCH 02/10] =?UTF-8?q?fix:=20#151=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=20=ED=85=8D=EC=8A=A4=ED=8A=B8=20=EA=B0=84=EA=B2=A9=20?= =?UTF-8?q?=EC=88=98=EC=A0=95,=20=EC=95=A1=EC=85=98=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../View/NoTreatment/NoTreatmentFilterView.swift | 10 +++++++++- .../Treatment/View/Treatment/TreatmentFilterView.swift | 7 ++++++- .../Global/Components/Treatment/TreatmentRowView.swift | 4 ++-- 3 files changed, 17 insertions(+), 4 deletions(-) diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentFilterView.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentFilterView.swift index 5b343f66..6b83990f 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentFilterView.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentFilterView.swift @@ -26,7 +26,15 @@ struct NoTreatmentFilterView: View { displayMode: .checkBoxView, treatmentEntity: treatment, isSelected: .constant(viewModel.isSelected(treatment)), - action: { viewModel.addTreatment(treatment) } + action: { + if viewModel.isSelected(treatment) { + viewModel.removeTreatment(treatment) + } else { + viewModel.addTreatment(treatment) + + } + + } ) .padding(.horizontal, 34.adjustedW) diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/Treatment/TreatmentFilterView.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/Treatment/TreatmentFilterView.swift index da2233c1..4c630c78 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/Treatment/TreatmentFilterView.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/Treatment/TreatmentFilterView.swift @@ -51,7 +51,12 @@ struct TreatmentFilterView: View { displayMode: .checkBoxView, treatmentEntity: treatment, isSelected: .constant(viewModel.isSelected(treatment)), - action: { viewModel.addTreatment(treatment) } + action: { if viewModel.isSelected(treatment) { + viewModel.removeTreatment(treatment) + } else { + viewModel.addTreatment(treatment) + + } } ) } .padding(.horizontal, 24.adjustedW) diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Global/Components/Treatment/TreatmentRowView.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Global/Components/Treatment/TreatmentRowView.swift index 242f2a01..cd618f6e 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Global/Components/Treatment/TreatmentRowView.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Global/Components/Treatment/TreatmentRowView.swift @@ -71,7 +71,7 @@ private struct TreatmentSummaryView: View { Spacer() .frame(width: 12.adjustedW) TypographyText( - "다운타임*\(treatmentEntity.downtimeMin)-\(treatmentEntity.downtimeMax)일", + "다운타임* \(treatmentEntity.downtimeMin)-\(treatmentEntity.downtimeMax)일", style: .body1_r_14, color: .gray700 ) @@ -180,7 +180,7 @@ private struct DownTimeLabel: View { Image(.clock) .gray700() TypographyText( - "다운타임*\(downtimeMin)-\(downtimeMax)일", + "다운타임* \(downtimeMin)-\(downtimeMax)일", style: .body2_r_13, color: .gray700 ) From 9179889e157cce2f0790fb5ce51bc3d773805e9e Mon Sep 17 00:00:00 2001 From: JaeSunEo Date: Thu, 22 Jan 2026 04:56:28 +0900 Subject: [PATCH 03/10] =?UTF-8?q?fix:=20#151=20=E2=80=9C=EC=8B=9C=EC=88=A0?= =?UTF-8?q?=20=EC=9D=BC=EC=A0=95=EC=9D=84=20=EC=B6=94=EA=B0=80=ED=95=B4-?= =?UTF-8?q?=E2=80=9D=20=ED=85=8D=EC=8A=A4=ED=8A=B8=20=ED=96=89=EA=B0=84?= =?UTF-8?q?=EC=9D=B4=20=EC=A2=81=EC=9D=8C=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SelectTreatment/SelectTreatmentView.swift | 17 +++++++++++------ 1 file changed, 11 insertions(+), 6 deletions(-) diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/SelectTreatment/SelectTreatmentView.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/SelectTreatment/SelectTreatmentView.swift index a3da3a84..f13b7186 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/SelectTreatment/SelectTreatmentView.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/SelectTreatment/SelectTreatmentView.swift @@ -69,15 +69,20 @@ extension SelectTreatmentView { @ViewBuilder private var titleView: some View { - HStack { - VStack(alignment: .leading){ - TypographyText("시술 일정을 추가해볼게요.", style: .title1_sb_18, color: .gray1000) - - TypographyText("이미 생각해둔 시술이 있나요?", style: .title1_sb_18, color: .gray1000) + HStack(spacing: 0) { + VStack(alignment: .leading, spacing: 0){ + VStack(alignment: .leading,spacing: 0) { + TypographyText("시술 일정을 추가해볼게요.", style: .title1_sb_18, color: .gray1000) + TypographyText("이미 생각해둔 시술이 있나요?", style: .title1_sb_18, color: .gray1000) + } + .frame(height: 54.adjustedH) + Spacer() + .frame(height: 4.adjustedH) TypographyText("시술을 선택하셨는지 확인할게요.", style: .body1_r_14, color: .gray700) - + .frame(height: 20.adjustedH) } + .frame(height: 78.adjustedH) Spacer() } } From 44f512172bb9e1261ce22d635520c6d6c223a213 Mon Sep 17 00:00:00 2001 From: JaeSunEo Date: Thu, 22 Jan 2026 05:24:51 +0900 Subject: [PATCH 04/10] =?UTF-8?q?fix:=20#151=20=EB=86=92=EC=9D=B4=20?= =?UTF-8?q?=EC=A1=B0=EC=A0=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SelectTreatment/SelectTreatmentView.swift | 8 +++-- .../View/NoTreatment/NoTreatmentView.swift | 6 +++- .../View/TargetDdaySettingView.swift | 11 +++---- .../CherrishTextBox/CherrishTextBox.swift | 1 + .../CherrishTextBox/DateTextBox.swift | 1 + .../Treatment/TreatmentRowView.swift | 31 ++++++++++++------- 6 files changed, 35 insertions(+), 23 deletions(-) diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/SelectTreatment/SelectTreatmentView.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/SelectTreatment/SelectTreatmentView.swift index f13b7186..ae70bc4f 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/SelectTreatment/SelectTreatmentView.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/SelectTreatment/SelectTreatmentView.swift @@ -71,11 +71,13 @@ extension SelectTreatmentView { private var titleView: some View { HStack(spacing: 0) { VStack(alignment: .leading, spacing: 0){ - VStack(alignment: .leading,spacing: 0) { + TypographyText("시술 일정을 추가해볼게요.", style: .title1_sb_18, color: .gray1000) + .frame(height: 27.adjustedH) TypographyText("이미 생각해둔 시술이 있나요?", style: .title1_sb_18, color: .gray1000) - } - .frame(height: 54.adjustedH) + .frame(height: 27.adjustedH) + + Spacer() .frame(height: 4.adjustedH) diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentView.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentView.swift index a0331911..4ba1876c 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentView.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentView.swift @@ -157,18 +157,22 @@ private struct TreatmentSelectedCategory: View { style: .title1_sb_18, color: .gray1000 ) + .frame(height: 27.adjustedH) TypographyText( "외모 고민은 무엇인가요?", style: .title1_sb_18, color: .gray1000 ) - + .frame(height: 27.adjustedH) + Spacer() + .frame(height: 4.adjustedH) TypographyText( "선택한 고민을 기준으로 시술 정보를 정리해줘요.", style: .body1_m_14, color: .gray700 ) + .frame(height: 20.adjustedH) } .frame(height: 78.adjustedH) diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/TargetDdaySettingView.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/TargetDdaySettingView.swift index 1d4f0871..649975f9 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/TargetDdaySettingView.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/TargetDdaySettingView.swift @@ -8,8 +8,8 @@ import SwiftUI enum DdayState: CaseIterable { - case yes case no + case yes var id: Self { self } var title: String { @@ -38,17 +38,14 @@ struct TargetDdaySettingView: View { HStack(spacing:0){ VStack(alignment: .leading, spacing: 0) { TypographyText("회복을 계획할 때 고려해야 할", style: .title1_sb_18, color: .gray1000) - + .frame(height: 27.adjustedH) TypographyText("중요한 일정이 있나요?", style: .title1_sb_18, color: .gray1000) - + .frame(height: 27.adjustedH) } - Spacer() } - .frame(height: 54.adjustedH) - Spacer() - .frame(height: 40) + .frame(height: 40.adjustedH) HStack(spacing: 12.adjustedW) { ForEach(DdayState.allCases, id: \.self) { state in diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Global/Components/CherrishTextBox/CherrishTextBox.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Global/Components/CherrishTextBox/CherrishTextBox.swift index 5bcc4a2c..0bf0770d 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Global/Components/CherrishTextBox/CherrishTextBox.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Global/Components/CherrishTextBox/CherrishTextBox.swift @@ -17,6 +17,7 @@ struct CherrishTextBox: View { VStack(spacing: 0) { HStack(spacing: 0) { TypographyText(title, style: .body1_sb_14,color: .gray1000) + .frame(height: 20.adjustedH) Spacer() } Spacer() diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Global/Components/CherrishTextBox/DateTextBox.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Global/Components/CherrishTextBox/DateTextBox.swift index 6f211851..e700cc44 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Global/Components/CherrishTextBox/DateTextBox.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Global/Components/CherrishTextBox/DateTextBox.swift @@ -16,6 +16,7 @@ struct DateTextBox: View { VStack(spacing: 8) { HStack(spacing: 0) { TypographyText("날짜", style: .body1_sb_14, color: .gray1000) + .frame(height: 20.adjustedH) Spacer() } HStack(spacing: 14){ diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Global/Components/Treatment/TreatmentRowView.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Global/Components/Treatment/TreatmentRowView.swift index cd618f6e..c72a0e80 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Global/Components/Treatment/TreatmentRowView.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Global/Components/Treatment/TreatmentRowView.swift @@ -71,11 +71,14 @@ private struct TreatmentSummaryView: View { Spacer() .frame(width: 12.adjustedW) TypographyText( - "다운타임* \(treatmentEntity.downtimeMin)-\(treatmentEntity.downtimeMax)일", + treatmentEntity.downtimeMin == 0 && treatmentEntity.downtimeMax == 0 ? + "다운타임* 0일" : + "다운타임* \(treatmentEntity.downtimeMin)-\(treatmentEntity.downtimeMax)일", style: .body1_r_14, color: .gray700 ) + Spacer() Image(.deletebox) .onTapGesture { @@ -118,8 +121,7 @@ private struct TreatmentCheckBoxView: View { var body: some View { VStack(spacing: 0) { HStack { - Text(treatmentEntity.name) - .typography(.title1_sb_18) + TypographyText(treatmentEntity.name, style: .title1_sb_18, color: .gray1000) .frame(height: 24.adjustedH) Spacer() if isCompletedView{ @@ -127,19 +129,21 @@ private struct TreatmentCheckBoxView: View { } } HStack(spacing: 0) { - Text(treatmentEntity.benefits.joinedWithSeparator()) - .typography(.body3_r_12) - .foregroundStyle(.gray700) - .frame(height: 18.adjustedH) + TypographyText( + treatmentEntity.benefits.joinedWithSeparator(), + style: .body3_r_12, + color: .gray700 + ) + .frame(height: 18.adjustedH) Spacer() } Spacer() DownTimeLabel(downtimeMin: treatmentEntity.downtimeMin, downtimeMax: treatmentEntity.downtimeMax) } - .padding(.vertical, 12) - .padding(.horizontal, 14) - .frame(height: 100) + .padding(.vertical, 12.adjustedH) + .padding(.horizontal, 14.adjustedW) + .frame(height: 100.adjustedH) .background { if isCompleted { RoundedRectangle(cornerRadius: 10) @@ -175,12 +179,15 @@ private struct DownTimeLabel: View { let downtimeMin: Int let downtimeMax: Int var body: some View { - HStack(spacing: 0){ + HStack(alignment: .center, spacing: 0){ Spacer() Image(.clock) .gray700() + .frame(width: 24.adjustedH, height: 24.adjustedH) TypographyText( - "다운타임* \(downtimeMin)-\(downtimeMax)일", + downtimeMin == 0 && downtimeMax == 0 ? + "다운타임* 0일" : + "다운타임* \(downtimeMin)-\(downtimeMax)일", style: .body2_r_13, color: .gray700 ) From 39290d5fcf2454eb0424f9733b512e1b7cfa5d95 Mon Sep 17 00:00:00 2001 From: JaeSunEo Date: Thu, 22 Jan 2026 05:51:23 +0900 Subject: [PATCH 05/10] =?UTF-8?q?fix:=20#151=20=ED=8C=A8=EB=94=A9=20?= =?UTF-8?q?=EC=88=98=EC=A0=95=20=EB=B0=8F=20=EB=86=92=EC=9D=B4=20=EC=A1=B0?= =?UTF-8?q?=EC=A0=88?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Treatment/View/DownTimeSettingView.swift | 62 ++++++++++--------- .../NoTreatment/NoTreatmentFilterView.swift | 21 +++---- .../View/NoTreatment/NoTreatmentView.swift | 5 +- .../View/Treatment/TreatmentFilterView.swift | 2 +- 4 files changed, 45 insertions(+), 45 deletions(-) diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/DownTimeSettingView.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/DownTimeSettingView.swift index da3ad424..e66d2877 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/DownTimeSettingView.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/DownTimeSettingView.swift @@ -14,7 +14,7 @@ struct DownTimeSettingView: View { let today: (year: Int, month: Int, day: Int) var body: some View { - VStack { + VStack(spacing: 0) { Spacer() .frame(height: 30.adjustedH) @@ -30,9 +30,10 @@ struct DownTimeSettingView: View { } .padding(.horizontal, 25.adjustedW) ScrollView(.vertical, showsIndicators: false) { - VStack { - Spacer() - .frame(height: 24.adjustedH) + Spacer() + .frame(height: 24.adjustedH) + VStack(spacing: 10) { + ForEach(treatments, id: \.self) { treatment in TreatmentRowView( displayMode: .completeBoxView, @@ -48,42 +49,43 @@ struct DownTimeSettingView: View { selectedTreatment = treatment }) } + } + .padding(.horizontal, 25.adjustedW) + Spacer() + .frame(height: 14.adjustedH) + + HStack(alignment: .top, spacing: 0) { + TypographyText( + "◎", + style: .body3_r_12, + color: .gray600 + ) - Spacer() - .frame(height: 14.adjustedH) - - HStack(alignment: .top, spacing: 0) { + VStack(alignment: .leading, spacing: 0) { TypographyText( - "◎", + "본 정보는 의료 상담이나 진단을 대체하지 않으며,", style: .body3_r_12, color: .gray600 ) - VStack(alignment: .leading, spacing: 0) { - TypographyText( - "본 정보는 의료 상담이나 진단을 대체하지 않으며,", - style: .body3_r_12, - color: .gray600 - ) - - TypographyText( - "실제 다운타임 및 회복 과정은 개인에 따라 다를 수 있습니다.", - style: .body3_r_12, - color: .gray600 - ) - - TypographyText( - "정확한 내용은 의료진 상담을 통해 확인하세요.", - style: .body3_r_12, - color: .gray600 - ) - - } + TypographyText( + "실제 다운타임 및 회복 과정은 개인에 따라 다를 수 있습니다.", + style: .body3_r_12, + color: .gray600 + ) + + TypographyText( + "정확한 내용은 의료진 상담을 통해 확인하세요.", + style: .body3_r_12, + color: .gray600 + ) - Spacer() } + + Spacer() } .padding(.horizontal, 25.adjustedW) + } } diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentFilterView.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentFilterView.swift index 6b83990f..6f465842 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentFilterView.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentFilterView.swift @@ -52,16 +52,16 @@ private struct TitleHeaderView: View { var body: some View { VStack(spacing: 4.adjustedH) { - VStack(alignment: .leading) { + VStack(alignment: .leading, spacing: 0) { HStack(spacing: 6.adjustedW) { TypographyText(title, style: .title1_sb_18, color: .gray1000) - + .frame(height: 27.adjustedH) TypographyText("관련 시술 리스트", style: .title1_sb_18, color: .gray1000) - + .frame(height: 27.adjustedH) Spacer() } - .frame(height: 27.adjustedH) + HStack(spacing: 4.adjustedW) { VStack { @@ -70,20 +70,17 @@ private struct TitleHeaderView: View { Spacer() } - VStack(alignment: .leading) { + VStack(alignment: .leading, spacing: 0) { TypographyText("본 정보는 인터넷 빅테이터 검색 및 분석을 통해 수집된 정보이며, ", style: .body3_r_12, color: .gray600) - - TypographyText("관련 시술 리스트", style: .body3_r_12, color: .gray600) - + .frame(height: 17.adjustedH) + TypographyText("공식적인 의료 정보가 아닙니다.", style: .body3_r_12, color: .gray600) + .frame(height: 17.adjustedH) } - .frame(height: 34.adjustedH) } } .padding(.horizontal, 25.adjustedW) .padding(.vertical, 20.adjustedH) - Spacer() - } .background(Color.gray100) .overlay(alignment: .top) { @@ -96,7 +93,7 @@ private struct TitleHeaderView: View { .frame(height: 1.adjustedH) .gray500() } - .frame(height: 105) + .frame(height: 105.adjustedH ) } } diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentView.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentView.swift index 4ba1876c..5f2f298d 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentView.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentView.swift @@ -180,9 +180,10 @@ private struct TreatmentSelectedCategory: View { Spacer() } .padding(.horizontal, 34.adjustedW) - Spacer() - .frame(height: 40.adjustedH) + ScrollView(.vertical, showsIndicators:false) { + Spacer() + .frame(height: 40.adjustedH) LazyVGrid(columns: columns, spacing: 12.adjustedH) { ForEach(viewModel.categories, id: \.id) { category in SelectionChip( diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/Treatment/TreatmentFilterView.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/Treatment/TreatmentFilterView.swift index 4c630c78..e99915fd 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/Treatment/TreatmentFilterView.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/Treatment/TreatmentFilterView.swift @@ -10,7 +10,7 @@ import SwiftUI struct TreatmentFilterView: View { @ObservedObject var viewModel: TreatmentViewModel var body: some View { - VStack { + VStack(spacing: 0) { TreatmentSearchBarTextField( text: $viewModel.searchText, onTap: { From 0bfdf4260b53ee4101fcc32e192409dd375f589e Mon Sep 17 00:00:00 2001 From: JaeSunEo Date: Thu, 22 Jan 2026 05:59:42 +0900 Subject: [PATCH 06/10] =?UTF-8?q?fix:=20#151=20=ED=8C=A8=EB=94=A9=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../View/NoTreatment/NoTreatmentFilterView.swift | 11 +++++------ 1 file changed, 5 insertions(+), 6 deletions(-) diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentFilterView.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentFilterView.swift index 6f465842..d0376106 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentFilterView.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentFilterView.swift @@ -14,12 +14,12 @@ struct NoTreatmentFilterView: View { VStack(spacing: 0) { TitleHeaderView(title: viewModel.selectedCategory?.title ?? "") - Spacer() - .frame(height: 10.adjustedH) +// Spacer() +// .frame(height: 18.adjustedH) ScrollView(.vertical, showsIndicators: false){ Spacer() - .frame(height: 10.adjustedH) + .frame(height: 18.adjustedH) ForEach(viewModel.treatments, id: \.id) { treatment in TreatmentRowView( @@ -32,11 +32,10 @@ struct NoTreatmentFilterView: View { } else { viewModel.addTreatment(treatment) - } - + } } ) - .padding(.horizontal, 34.adjustedW) + .padding(.horizontal, 25.adjustedW) } } From 62d5b10e6ab83db24ac1ee4777a8c5adc7667088 Mon Sep 17 00:00:00 2001 From: JaeSunEo Date: Thu, 22 Jan 2026 06:25:33 +0900 Subject: [PATCH 07/10] =?UTF-8?q?fix:=20#151=20=EC=8B=9C=EC=88=A0=20?= =?UTF-8?q?=ED=95=84=ED=84=B0=EB=A7=81=20=EB=82=B4=20=EB=B0=94=ED=85=80?= =?UTF-8?q?=EC=8B=9C=ED=8A=B8=20=E2=86=92=20=EC=8B=9C=EC=88=A0=203?= =?UTF-8?q?=EA=B0=9C=EC=9D=B4=EC=83=81=20=EC=84=A0=ED=83=9D=20=EC=8B=9C=20?= =?UTF-8?q?4=EB=B2=88=EC=A7=B8=20=EC=8B=9C=EC=88=A0=EB=B6=80=ED=84=B0=20?= =?UTF-8?q?=EB=94=B0=EB=9D=BC=EA=B0=80=EA=B8=B0=20=EC=99=84=EB=A3=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../View/SelectedTreatmentSheetView.swift | 56 ++++++++++++------- 1 file changed, 35 insertions(+), 21 deletions(-) diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/SelectedTreatmentSheetView.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/SelectedTreatmentSheetView.swift index e0f573ce..22cabb34 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/SelectedTreatmentSheetView.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/SelectedTreatmentSheetView.swift @@ -24,6 +24,7 @@ struct SelectedTreatmentSheetView: View { @State private var topGlobalY: CGFloat = .zero @State private var initialTopGlobalY: CGFloat? = nil @State private var bottomOffsetY: CGFloat = .zero + @State private var scrollTargetID: UUID? var body: some View { VStack(spacing: 0) { @@ -51,28 +52,44 @@ struct SelectedTreatmentSheetView: View { y: -5 ) ZStack { - ScrollView(.vertical, showsIndicators: false) { - VStack(spacing: spacing) { - if selectedTreatments.count > 3 { - scrollViewTopMarkerView - .allowsHitTesting(false) + ScrollViewReader { proxy in + ScrollView(.vertical, showsIndicators: false) { + VStack(spacing: spacing) { + if selectedTreatments.count > 3 { + scrollViewTopMarkerView + .allowsHitTesting(false) + } + ForEach(selectedTreatments, id: \.id) { treatment in + TreatmentRowView( + displayMode: .summary, + treatmentEntity: treatment, + isSelected: .constant(true), + action: { removeTreatment(treatment) } + ) + .id(treatment.id) + .frame(height: itemHeight) + } + if selectedTreatments.count > 3 { + scrollViewBottomMarkerView + .allowsHitTesting(false) + } + + // 스크롤 앵커용 더미 뷰 + Color.clear + .frame(height: 1) + .id("scrollBottom") } - ForEach(selectedTreatments, id: \.id) { treatment in - TreatmentRowView( - displayMode: .summary, - treatmentEntity: treatment, - isSelected: .constant(true), - action: { removeTreatment(treatment) } - ) - .frame(height: itemHeight) - } - if selectedTreatments.count > 3 { - scrollViewBottomMarkerView - .allowsHitTesting(false) + .padding(.vertical, 14.adjustedH) + } + .onChange(of: selectedTreatments.count) { oldCount, newCount in + if newCount > oldCount { + withAnimation { + proxy.scrollTo("scrollBottom", anchor: .bottom) + } } } - .padding(.vertical, 14.adjustedH) } + if selectedTreatments.count > 3 { GradientBox(isTop: true) .frame(height: 42.adjustedH) @@ -86,9 +103,6 @@ struct SelectedTreatmentSheetView: View { .opacity(shouldShowGradientBottom ? 1 : 0) .frame(maxHeight: .infinity, alignment: .bottom) } - - - } .frame(height: scrollViewHeight) .padding(.horizontal, 24.5.adjustedW) From 79bfc0f441e3d01517e7d25f9598b93eb4e58d32 Mon Sep 17 00:00:00 2001 From: JaeSunEo Date: Thu, 22 Jan 2026 17:10:38 +0900 Subject: [PATCH 08/10] =?UTF-8?q?fix:=20#155=20=EC=BB=B4=ED=8F=AC=EB=84=8C?= =?UTF-8?q?=ED=8A=B8=20=EA=B5=AC=EC=A1=B0=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../NoTreatment/NoTreatmentFilterView.swift | 6 +++--- .../View/NoTreatment/NoTreatmentView.swift | 16 +++++++++------- .../View/SelectedTreatmentSheetView.swift | 8 ++++++-- .../View/Treatment/TreatmentFilterView.swift | 4 +++- .../View/Treatment/TreatmentView.swift | 17 +++++++++-------- 5 files changed, 30 insertions(+), 21 deletions(-) diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentFilterView.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentFilterView.swift index d0376106..036cfffd 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentFilterView.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentFilterView.swift @@ -14,9 +14,6 @@ struct NoTreatmentFilterView: View { VStack(spacing: 0) { TitleHeaderView(title: viewModel.selectedCategory?.title ?? "") -// Spacer() -// .frame(height: 18.adjustedH) - ScrollView(.vertical, showsIndicators: false){ Spacer() .frame(height: 18.adjustedH) @@ -38,7 +35,10 @@ struct NoTreatmentFilterView: View { .padding(.horizontal, 25.adjustedW) } + Spacer() + .frame(height: 198.adjustedH) } + } .task { await viewModel.fetchNoTreatments() diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentView.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentView.swift index 5f2f298d..f5db3ccb 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentView.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/NoTreatment/NoTreatmentView.swift @@ -79,6 +79,15 @@ struct NoTreatmentView: View { case .treatmentFilter: NoTreatmentFilterView(viewModel: viewModel) + .overlay(alignment: .bottom) { + if viewModel.state == .treatmentFilter, !viewModel.selectedTreatments.isEmpty { + SelectedTreatmentSheetView( + selectedTreatments: viewModel.selectedTreatments, + removeTreatment: viewModel.removeTreatment(_:) + ) + + } + } case .downTimeSetting: DownTimeSettingView( @@ -101,13 +110,6 @@ struct NoTreatmentView: View { @ViewBuilder private func bottomView() -> some View { VStack(spacing: 0) { - if viewModel.state == .treatmentFilter, !viewModel.selectedTreatments.isEmpty { - SelectedTreatmentSheetView( - selectedTreatments: viewModel.selectedTreatments, - removeTreatment: viewModel.removeTreatment(_:) - ) - } - CherrishButton( title: "다음", type: .large, diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/SelectedTreatmentSheetView.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/SelectedTreatmentSheetView.swift index 22cabb34..945cac3c 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/SelectedTreatmentSheetView.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/SelectedTreatmentSheetView.swift @@ -69,12 +69,13 @@ struct SelectedTreatmentSheetView: View { .id(treatment.id) .frame(height: itemHeight) } + .padding(.horizontal, 24.5.adjustedW) if selectedTreatments.count > 3 { scrollViewBottomMarkerView .allowsHitTesting(false) } - // 스크롤 앵커용 더미 뷰 + Color.clear .frame(height: 1) .id("scrollBottom") @@ -104,8 +105,9 @@ struct SelectedTreatmentSheetView: View { .frame(maxHeight: .infinity, alignment: .bottom) } } + .background(.gray0) .frame(height: scrollViewHeight) - .padding(.horizontal, 24.5.adjustedW) + .coordinateSpace(name: "SelectedTreatmentScroll") .onPreferenceChange(ScrollTopPreferenceKey.self) { minY in if initialTopGlobalY == nil { initialTopGlobalY = minY } @@ -114,7 +116,9 @@ struct SelectedTreatmentSheetView: View { .onPreferenceChange(ScrollBottomPreferenceKey.self) { height in bottomOffsetY = height } + } + } } diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/Treatment/TreatmentFilterView.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/Treatment/TreatmentFilterView.swift index e99915fd..0fdc7d20 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/Treatment/TreatmentFilterView.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/Treatment/TreatmentFilterView.swift @@ -21,7 +21,7 @@ struct TreatmentFilterView: View { isDisabled: false ) .padding(.horizontal, 25.adjustedW) - + .padding(.bottom, 8.adjustedH) ScrollView(.vertical, showsIndicators: false) { HStack(alignment: .top,spacing: 4) { TypographyText("◎", style: .body3_r_12, color: .gray600) @@ -61,6 +61,8 @@ struct TreatmentFilterView: View { } .padding(.horizontal, 24.adjustedW) } + Spacer() + .frame(height: 198.adjustedH) } } diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/Treatment/TreatmentView.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/Treatment/TreatmentView.swift index 79d8c920..aeba478d 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/Treatment/TreatmentView.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/Treatment/TreatmentView.swift @@ -74,7 +74,15 @@ struct TreatmentView: View { case .treatmentFilter: TreatmentFilterView(viewModel: viewModel) - + .overlay(alignment: .bottom) { + if viewModel.state == .treatmentFilter, !viewModel.selectedTreatments.isEmpty { + SelectedTreatmentSheetView( + selectedTreatments: viewModel.selectedTreatments, + removeTreatment: viewModel.removeTreatment(_:) + ) + + } + } case .downTimeSetting: DownTimeSettingView( treatments: $viewModel.selectedTreatments, @@ -97,13 +105,6 @@ struct TreatmentView: View { @ViewBuilder private func bottomView() -> some View { VStack(spacing: 0) { - if viewModel.state == .treatmentFilter, !viewModel.selectedTreatments.isEmpty { - SelectedTreatmentSheetView( - selectedTreatments: viewModel.selectedTreatments, - removeTreatment: viewModel.removeTreatment(_:) - ) - } - CherrishButton( title: "다음", type: .large, From 42f8febbd8e787f3de879bf57e9f6615be48acb5 Mon Sep 17 00:00:00 2001 From: JaeSunEo Date: Thu, 22 Jan 2026 17:15:30 +0900 Subject: [PATCH 09/10] =?UTF-8?q?fix:=20#151=20=EC=BD=94=EB=A6=AC=20?= =?UTF-8?q?=EB=B0=98=EC=98=81?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Calendar/Treatment/View/SelectedTreatmentSheetView.swift | 1 - 1 file changed, 1 deletion(-) diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/SelectedTreatmentSheetView.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/SelectedTreatmentSheetView.swift index 945cac3c..3027bf3a 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/SelectedTreatmentSheetView.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/SelectedTreatmentSheetView.swift @@ -24,7 +24,6 @@ struct SelectedTreatmentSheetView: View { @State private var topGlobalY: CGFloat = .zero @State private var initialTopGlobalY: CGFloat? = nil @State private var bottomOffsetY: CGFloat = .zero - @State private var scrollTargetID: UUID? var body: some View { VStack(spacing: 0) { From aa822f20753403e3df247ada0c5ef83806c8dcc9 Mon Sep 17 00:00:00 2001 From: JaeSunEo Date: Thu, 22 Jan 2026 17:16:27 +0900 Subject: [PATCH 10/10] =?UTF-8?q?chore:=20#151=20=EC=97=94=ED=84=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Calendar/Treatment/View/SelectedTreatmentSheetView.swift | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/SelectedTreatmentSheetView.swift b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/SelectedTreatmentSheetView.swift index 3027bf3a..ca3bdd93 100644 --- a/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/SelectedTreatmentSheetView.swift +++ b/Cherrish-iOS/Cherrish-iOS/Presentation/Feature/Calendar/Treatment/View/SelectedTreatmentSheetView.swift @@ -69,11 +69,11 @@ struct SelectedTreatmentSheetView: View { .frame(height: itemHeight) } .padding(.horizontal, 24.5.adjustedW) + if selectedTreatments.count > 3 { scrollViewBottomMarkerView .allowsHitTesting(false) } - Color.clear .frame(height: 1)