Вопрос 1. Я пытаюсь добавить контекстное меню к кнопке внутри списка -> Раздел -> ScrollView (горизонтально) в SwiftUI. Однако когда я нажимаю и удерживаю кнопку, контекстное меню применяется ко всему разделу, а не только к кнопке. Вот соответствующий код:
СКРИНШОТ 1
Почему контекстное меню применяется ко всему разделу, а не только к кнопке? Как сделать так, чтобы контекстное меню отображалось только для кнопки?
Вопрос 2. У меня есть представление templateSection, в которое я загружаю некоторые элементы шаблона и отображаю их в горизонтальной прокрутке. Однако всякий раз, когда я меняю тип фильтра или загружаю больше шаблонов, представление скелетной загрузки начинает вести себя странно — оно мерцает или отображается неправильно.
ВИДЕО (GIF) 2
Вот часть моего кода, где я определяю раздел с помощью ScrollView и LazyHStack:
Когда я прокручиваю или меняю фильтр, представление загрузки скелета дает сбой или ведет себя некорректно. странно. Что может быть причиной этой проблемы и как ее исправить?
Section(header: Text("Templates")) {
ScrollView(.horizontal, showsIndicators: false) {
LazyHStack(spacing: 15) {
Button(action: {
// Action to add a new template
}) {
VStack {
Image(systemName: "plus")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 30, height: 30)
.padding()
.background(Color.white)
.cornerRadius(10)
Text("Create")
.foregroundColor(.primary)
.font(.footnote)
.multilineTextAlignment(.center)
.padding(.top, 5)
.frame(width: 80)
}
.frame(width: 80, height: 100)
}
.contextMenu {
Button("Hello") {
// Context menu action
}
}
}
}
}
private var templateSection: some View {
Section(header: Text("Templates")) {
ScrollView(.horizontal, showsIndicators: false) {
LazyHStack(spacing: 15) {
if templatesLimit > 0 {
Button(action: {
showingTemplateAddSheet = true
}) {
VStack {
Image(systemName: "plus")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 30, height: 30)
.padding()
.background(Color.white)
.cornerRadius(10)
Text("Create")
.foregroundColor(.primary)
.font(.footnote)
.multilineTextAlignment(.center)
.padding(.top, 5)
.frame(width: 80)
}
.frame(width: 80, height: 100)
}
.sheet(isPresented: $showingTemplateAddSheet) {
NewTemplateView(shouldRefreshParentView: $shouldRefreshParentView)
}
}
ForEach(filteredTemplates) { item in
Button(action: {
selectedTemplateItem = item
}) {
VStack {
Image(systemName: "\(item.iconName)")
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 30, height: 30)
.padding()
.background(Color.white)
.cornerRadius(10)
Text(item.name)
.foregroundColor(.primary)
.font(.footnote)
.multilineTextAlignment(.center)
.padding(.top, 5)
.frame(width: 80)
}
.frame(width: 80, height: 100)
}
}
if viewModel.isLoadingTemplatesMore {
ForEach(0..
Подробнее здесь: https://stackoverflow.com/questions/791 ... n-in-swift