NavigationSplitView не выполняет переход к деталям на iPhone (но делает это на iPad)IOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Гость
 NavigationSplitView не выполняет переход к деталям на iPhone (но делает это на iPad)

Сообщение Гость »

Я пытаюсь понять, есть ли способ использовать NavigationSplitView, где представление содержимого не является списком. Я хочу иметь собственное представление контента без списка. Проблема, однако, в том, что если я не использую список, подробное представление не отображается на iPhone.
Вот мой код отправной точки, который работает нормально, т. е. подробное представление отображается на iPhone.

Код: Выделить всё

import SwiftUI

struct ContentView: View {

@State private var selectedCategory: Category?
@State private var selectedRecipe: Recipe?

var body: some View {

NavigationSplitView {
List(Category.allCases, selection: $selectedCategory) { category in

NavigationLink(value: category) {

Text(category.rawValue)
}
}
} content: {

if let selectedCategory {

List(Recipe.allCases, selection: $selectedRecipe) { recipe in

NavigationLink(value: recipe) {

Text(recipe.rawValue)
}
}
} else {
Text("Nothing selected")
}
} detail: {
if let selectedRecipe {
Text(selectedRecipe.rawValue)
} else {
Text("Nothing selected")
}
}
}
}

enum Category: String, CaseIterable, Identifiable {
var id: String {
self.rawValue
}

case main
case settings
}

enum Recipe: String, CaseIterable, Identifiable {
var id: String {
self.rawValue
}

case omelet
case cereal
}

Теперь вот модификация, которая позволяет мне удалить ненужную (в моем случае) NavigationLink. Этот код также работает нормально. Кнопка (при нажатии) может обновить выбранный рецепт, в результате чего на iPhone появится подробное представление.

Код: Выделить всё

...
List(Recipe.allCases, selection: $selectedRecipe) { recipe in

//                    NavigationLink(value: recipe) {
//
//                        Text(recipe.rawValue)
//                    }

Button {
self.selectedRecipe = recipe
} label: {
Text(recipe.rawValue)
}
}
...
Но поскольку мне не нужны ни List, ни NavigationLink в моем пользовательском представлении контента, я попробовал это (упрощенный код). Это работает на iPad, где в области подробностей отображается выбранный рецепт, но на iPhone подробное представление не выдвигается и не заменяет представление содержимого.< /p>

Код: Выделить всё

...
Button {
self.selectedRecipe = Recipe.omelet
} label: {
Text(Recipe.omelet.rawValue)
}
...

В любом случае, меня просто смущает происходящее волшебство, требующее List с привязкой выбора для установки self.selectedRecipe фактически приводит к появлению подробного представления на iPhone.
  • iOS 17 или новее
  • Xcode 15.3
  • macOS 14.4.1 «Sonoma»
Любые рекомендации приветствуются.

Подробнее здесь: https://stackoverflow.com/questions/784 ... es-on-ipad
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»