Видимость столбца 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) в альбомной ориентации.

Из документации Apple

В 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")
        }
    }
}
Другие вопросы по тегам