Skip to content

Commit 2bc7b3d

Browse files
committed
ui: iOS 17은 상시 서치바가 떠있도록 변경
1 parent 1c4149e commit 2bc7b3d

2 files changed

Lines changed: 47 additions & 31 deletions

File tree

DevLog/Resource/Localizable.xcstrings

Lines changed: 0 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -251,9 +251,6 @@
251251
},
252252
"검색어를 입력해 저장한 앱 컨텐츠를 찾아보세요." : {
253253

254-
},
255-
"검색어를 입력해주세요." : {
256-
257254
},
258255
"계정 삭제" : {
259256

DevLog/UI/Home/TodoListView.swift

Lines changed: 47 additions & 28 deletions
Original file line numberDiff line numberDiff line change
@@ -15,10 +15,28 @@ struct TodoListView: View {
1515

1616
var body: some View {
1717
Group {
18-
if viewModel.state.isSearching {
19-
todoSearchContent
18+
if #available(iOS 18, *) {
19+
if viewModel.state.isSearching {
20+
todoSearchContent
21+
} else {
22+
todoListContent
23+
}
2024
} else {
21-
todoListContent
25+
Group {
26+
if viewModel.state.searchText.isEmpty {
27+
todoListContent
28+
} else {
29+
searchResultsContent
30+
}
31+
}
32+
.searchable(
33+
text: Binding(
34+
get: { viewModel.state.searchText },
35+
set: { viewModel.send(.setSearchText($0)) }
36+
),
37+
placement: .navigationBarDrawer(displayMode: .always),
38+
prompt: "\(viewModel.state.kind.localizedName) 검색"
39+
)
2240
}
2341
}
2442
.navigationDestination(for: Path.self) { path in
@@ -74,11 +92,13 @@ struct TodoListView: View {
7492
if #available(iOS 26.0, *) {
7593
ToolbarSpacer(.fixed, placement: .topBarTrailing)
7694
}
77-
ToolbarItem(placement: .topBarTrailing) {
78-
Button {
79-
viewModel.send(.setIsSearching(true))
80-
} label: {
81-
Image(systemName: "magnifyingglass")
95+
if #available(iOS 18, *) {
96+
ToolbarItem(placement: .topBarTrailing) {
97+
Button {
98+
viewModel.send(.setIsSearching(true))
99+
} label: {
100+
Image(systemName: "magnifyingglass")
101+
}
82102
}
83103
}
84104
}
@@ -152,22 +172,33 @@ struct TodoListView: View {
152172
}
153173
}
154174

155-
@ViewBuilder
175+
@available(iOS 18, *)
156176
private var todoSearchContent: some View {
177+
searchResultsContent
178+
.searchable(
179+
text: Binding(
180+
get: { viewModel.state.searchText },
181+
set: { viewModel.send(.setSearchText($0)) }
182+
),
183+
isPresented: Binding(
184+
get: { viewModel.state.isSearching },
185+
set: { viewModel.send(.setIsSearching($0)) }
186+
),
187+
placement: .navigationBarDrawer(displayMode: .always),
188+
prompt: "\(viewModel.state.kind.localizedName) 검색"
189+
)
190+
}
191+
192+
private var searchResultsContent: some View {
157193
let searchResults = viewModel.state.searchResults
158194
let limit = viewModel.searchResultsLimit
159195
let displayedTodos = viewModel.state.showAllSearchResults
160196
? searchResults
161197
: Array(searchResults.prefix(limit))
162198

163-
ScrollView {
199+
return ScrollView {
164200
LazyVStack(spacing: 0) {
165-
if viewModel.state.searchText.isEmpty {
166-
Text("검색어를 입력해주세요.")
167-
.foregroundStyle(Color.gray)
168-
.frame(maxWidth: .infinity)
169-
.padding(.top, 40)
170-
} else if viewModel.state.isLoading {
201+
if viewModel.state.isLoading {
171202
LoadingView()
172203
.padding(.top, 40)
173204
} else if searchResults.isEmpty {
@@ -200,18 +231,6 @@ struct TodoListView: View {
200231
}
201232
}
202233
}
203-
.searchable(
204-
text: Binding(
205-
get: { viewModel.state.searchText },
206-
set: { viewModel.send(.setSearchText($0)) }
207-
),
208-
isPresented: Binding(
209-
get: { viewModel.state.isSearching },
210-
set: { viewModel.send(.setIsSearching($0)) }
211-
),
212-
placement: .navigationBarDrawer(displayMode: .always),
213-
prompt: "\(viewModel.state.kind.localizedName) 검색"
214-
)
215234
}
216235

217236
private var headerView: some View {

0 commit comments

Comments
 (0)