Панель инструментов SwiftUI не отображается в представлении NavigationLink

Я пытаюсь показать панель инструментов в представлении, которое находится внутри навигационных ссылок. Когда я перехожу к третьему виду, я получаю следующее сообщение:

2020-09-15 23: 09: 31.097289-0500 CountTime [35018: 3542166] [Assert] displayModeButtonItem управляется внутренне и не предоставляется для стиля DoubleColumn. Возвращение пустого, отключенного UIBarButtonItem для выполнения ненулевого контракта.

И панель инструментов не отображается. Это происходит только на iPhone, а не на iPad. Я использую Xcode 12 GM.

Вот код:

struct ContentView: View {
    var body: some View {
        NavigationView {
            NavigationLink(
                destination: SecondView(),
                label: {
                    Text("Navigate")
                })
        }
    }
}

struct SecondView: View {
    var body: some View {
        ZStack {
            NavigationLink(
                destination: Text("Destination")
                    .toolbar {
                        ToolbarItem(placement: ToolbarItemPlacement.bottomBar) {
                                Button(action: {
                                    print("sharing")
                                }) {
                                    Image(systemName: "square.and.arrow.up")
                                }
                        }
                    },
                label: {
                    Text("Navigate")
                })
        }
    }
}

person Happygallo    schedule 16.09.2020    source источник


Ответы (1)


displayModeButtonItem управляется внутренне и не отображается для стиля DoubleColumn.

В вашем случае SwiftUI по какой-то причине пытается представить NavigationView в стиле DoubleColumn.

Возможное решение - явно указать стиль:

struct ContentView: View {
    var body: some View {
        NavigationView {
            NavigationLink(destination: SecondView()) {
                Text("Navigate")
            }
        }
        .navigationViewStyle(StackNavigationViewStyle())
    }
}
person pawello2222    schedule 16.09.2020
comment
Это работает, и теперь панель инструментов отображается, но переход панели инструментов между представлениями не плавный, и появляется новое сообщение консоли: [Снимок] Снимок представления (0x7fcd53e17110, _UIButtonBarStackView), который не был отображен хотя бы один раз, требует afterScreenUpdates: ДА . - person Happygallo; 16.09.2020
comment
@Happygallo Похоже на безобидное отладочное сообщение. И сама панель инструментов по-прежнему не работает. Я рекомендую вам либо добавить панель инструментов ко всем вашим представлениям, либо использовать простую плавную кнопку поверх представления (без панели инструментов). - person pawello2222; 16.09.2020