Видимость столбца NavigationSplitView не работает на iPhone
У меня есть два столбца NavigationSplitView со связанной переменной NavigationSplitViewVisibility. На iPad все работает как положено. При нажатии на «Перейти к подробному представлению» на боковой панели вы перейдете к подробному представлению. Однако на iPhone ничего не происходит. Любые идеи, как это решить.
Спасибо
Вот код:
struct ContentView: View {
@State var visibility:NavigationSplitViewVisibility = .all
var body: some View {
NavigationSplitView( columnVisibility:$visibility) {
Text("Go to Detail View" )
.onTapGesture {
visibility = .detailOnly
}
} detail: {
Text( "Show Sidebar")
.onTapGesture {
visibility = .all
}
}
}
}
1 ответ
не отображает несколько столбцов на iPhone, кроме больших (например, iPhone 14 Pro Max) в альбомной ориентации.
В watchOS и tvOS, а также с узкими размерами, такими как iPhone или iPad в режиме Slide Over, разделенное представление навигации сворачивает все свои столбцы в стопку и показывает последний столбец, в котором отображается полезная информация. … Для строк в списке, содержащих экземпляры NavigationLink, список рисует шевроны раскрытия в свернутом состоянии.
Если вы используетеNavigationLink
с вsidebar
,NavigationSplitView
на айфоне работает как обычноNavigationStack
. На больших устройствах содержимоеdetail
отображается только в том случае, если ссылка не выбрана.
В приведенном ниже примере нажатие кнопки «Скрыть боковую панель» ничего не даст, поэтому я добавилhorizontalSizeClass
Environment
переменная, которая позволяет скрыть кнопку на небольших устройствах.
struct ContentView: View {
let names = ["Fred", "Joe", "Bill"]
@State var visibility: NavigationSplitViewVisibility = .all
@Environment(\.horizontalSizeClass) var horizontalSizeClass
var body: some View {
NavigationSplitView(columnVisibility: $visibility) {
List {
ForEach(names, id: \.self) { name in
NavigationLink(name, destination: Text(name))
}
if horizontalSizeClass == .regular {
Button("Hide sidebar") {
withAnimation {
visibility = .detailOnly
}
}
}
}
} detail: {
Text("Select a name")
}
}
}