diff --git a/CHDataManagement/Views/Files/FileListView.swift b/CHDataManagement/Views/Files/FileListView.swift index aa5542f..9b4ebae 100644 --- a/CHDataManagement/Views/Files/FileListView.swift +++ b/CHDataManagement/Views/Files/FileListView.swift @@ -51,13 +51,19 @@ struct FileListView: View { TextField("", text: $searchString, prompt: Text("Search")) .textFieldStyle(.roundedBorder) .padding(.horizontal, 8) - List(filteredFiles) { file in - SelectableListItem(selected: selectedFile == file) { - Text(file.id) - } - .onTapGesture { - selectedFile = file + ScrollView { + LazyVStack(spacing: 0) { + ForEach(filteredFiles) { file in + SelectableListItem(selected: selectedFile == file) { + Text(file.id) + } + .id(file.id) + .onTapGesture { + selectedFile = file + } + } } + .padding(.horizontal, 8) } .onChange(of: selectedFileType) { oldValue, newValue in guard oldValue != newValue else { diff --git a/CHDataManagement/Views/Generic/SelectableListItem.swift b/CHDataManagement/Views/Generic/SelectableListItem.swift index 53c7aa0..2fa7b3a 100644 --- a/CHDataManagement/Views/Generic/SelectableListItem.swift +++ b/CHDataManagement/Views/Generic/SelectableListItem.swift @@ -2,25 +2,28 @@ import SwiftUI struct SelectableListItem: View where Content: View { - let content: Content + let content: () -> Content let selected: Bool - public init(selected: Bool, @ViewBuilder content: () -> Content) { + public init(selected: Bool, @ViewBuilder content: @escaping () -> Content) { self.selected = selected - self.content = content() + self.content = content } var body: some View { HStack { - content + content() Spacer() } + .padding(.horizontal, 4) + .padding(.vertical, 7) .foregroundStyle(selected ? Color.white : Color.primary) - .listRowBackground(RoundedRectangle(cornerRadius: 5) - .fill(selected ? Color.blue : Color.clear) - .padding(.horizontal, 10) - ) + .background(selected ? Color.blue : Color.clear) + .clipShape(RoundedRectangle(cornerRadius: 5)) .contentShape(Rectangle()) + .listRowInsets(.init(top: 0, leading: -8, bottom: 0, trailing: -8)) + .listRowBackground(Color.clear) + .listRowSeparator(.hidden) } } diff --git a/CHDataManagement/Views/Pages/PageListView.swift b/CHDataManagement/Views/Pages/PageListView.swift index f1bd4d2..ca8a46e 100644 --- a/CHDataManagement/Views/Pages/PageListView.swift +++ b/CHDataManagement/Views/Pages/PageListView.swift @@ -63,13 +63,18 @@ struct PageListView: View { TextField("", text: $searchString, prompt: Text("Search")) .textFieldStyle(.roundedBorder) .padding(.horizontal, 8) - List(filteredPages) { page in - SelectableListItem(selected: selection.page == page) { - PageListItem(page: page) - } - .onTapGesture { - selection.page = page - } + ScrollView { + LazyVStack(spacing: 0) { + ForEach(filteredPages) { page in + SelectableListItem(selected: selection.page == page) { + PageListItem(page: page) + } + .id(page) + .onTapGesture { + selection.page = page + } + } + }.padding(.horizontal, 8) } } .onAppear { diff --git a/CHDataManagement/Views/Posts/PostListView.swift b/CHDataManagement/Views/Posts/PostListView.swift index c534975..858ad9d 100644 --- a/CHDataManagement/Views/Posts/PostListView.swift +++ b/CHDataManagement/Views/Posts/PostListView.swift @@ -72,13 +72,18 @@ struct PostListView: View { TextField("", text: $searchString, prompt: Text("Search")) .textFieldStyle(.roundedBorder) .padding(.horizontal, 8) - List(filteredAndSortedPosts) { post in - SelectableListItem(selected: selection.post == post) { - PostListItem(post: post) - } - .onTapGesture { - selection.post = post - } + ScrollView { + LazyVStack(spacing: 0) { + ForEach(filteredAndSortedPosts) { post in + SelectableListItem(selected: selection.post == post) { + PostListItem(post: post) + } + .id(post) + .onTapGesture { + selection.post = post + } + } + }.padding(.horizontal, 8) } }.onAppear { if selection.post == nil, let first = content.posts.first { diff --git a/CHDataManagement/Views/Tags/TagListView.swift b/CHDataManagement/Views/Tags/TagListView.swift index 672b0fd..c113f69 100644 --- a/CHDataManagement/Views/Tags/TagListView.swift +++ b/CHDataManagement/Views/Tags/TagListView.swift @@ -32,13 +32,18 @@ struct TagListView: View { TextField("", text: $searchString, prompt: Text("Search")) .textFieldStyle(.roundedBorder) .padding(.horizontal, 8) - List(filteredAndSortedTags) { tag in - SelectableListItem(selected: selection.tag == tag) { - TagListItem(tag: tag.localized(in: language)) - } - .onTapGesture { - selection.tag = tag - } + ScrollView { + LazyVStack(spacing: 0) { + ForEach(filteredAndSortedTags) { tag in + SelectableListItem(selected: selection.tag == tag) { + TagListItem(tag: tag.localized(in: language)) + } + .id(tag) + .onTapGesture { + selection.tag = tag + } + } + }.padding(.horizontal, 8) } }.onAppear { if selection.tag == nil, let first = content.tags.first {