Видимость столбца SwiftUI NavigationSplitView на iPhone?
Я пытаюсь создать трехколоночный макет в SwiftUI.
Первый столбец — это LazyVGrid выбираемых элементов. Затем выбор влияет на список элементов в представлении содержимого (второй столбец), который также является не списком SwiftUI, а VStack + другими представлениями в представлении прокрутки. Выбор элементов в этом столбце влияет на подробное представление.
Я заставил все это работать на iPad, но это потому, что iPad отображает несколько столбцов одновременно, а NavigationSplitView поддерживает жесты на iPad, а также настройки видимости столбцов в коде.
Проблема в том, что я не могу найти способ программно перейти от одного столбца к другому на iPhone, поскольку он, похоже, не отвечает на привязки видимости столбца.
Сначала я работал с навигационными ссылками для каждого элемента в моей сетке, где пункт назначения был установлен на представление, но код был довольно неприятным.
В конце концов, я придумал код ниже. В первом столбце у меня есть представление сетки с настраиваемым модификатором onSelect, который я запускаю всякий раз, когда выбран элемент. Вот где я пытаюсь изменить видимость столбца. Я попытался установить vm.navigationColumnVisibility = .detailOnly, но iPhone, похоже, игнорирует это.
Я смог заставить его работать именно так, как ожидалось, изменив сетку на список. Свойство выбора/привязка в представлении списка, казалось, вызывало навигацию на iPhone. Однако это не желаемый UI/UX.
Любые советы о том, как программно вызвать навигацию между столбцами на iPhone или лучший способ адаптировать этот код для достижения описанного UI/UX?
struct JNavSplitView: View {
@EnvironmentObject var vm: JNavSplitViewModel
@State private var book: Book? = nil
@State private var entry: Entry? = nil
var sheet: some View {
#if os(macOS)
JEntryCreateFormMacOS(book: book)
#else
JEntryCreateForm(book: book)
.onCreate { entry in
self.entry = entry
}
#endif
}
var body: some View {
NavigationSplitView(columnVisibility: $vm.navigationColumnVisibility) {
BooksGridView(selected: $book)
.onSelect { book in
self.entry = book.getEntries(forDate: Date()).first
}
} content: {
BookEntriesView(book: book, selected: $entry)
} detail: {
PageCollectionView(entry: $entry)
}
.navigationViewStyle(DoubleColumnNavigationViewStyle())
#if os(macOS)
.toolbarBackground(Color("Purple 1000"), for: .windowToolbar)
#endif
.environmentObject(vm)
.sheet(isPresented: $vm.presentNewEntryForm, content: {
sheet
})
}
}