SwiftUI меняет вид с первого экрана на экран просмотра вкладок

Я хочу изменить представления, как только пользователь нажмет «начать», но из-за того, что в моем первом представлении было представление навигации, на следующем экране отображается кнопка «Назад», которую я не хочу. Пожалуйста, смотрите изображения, прикрепленные ниже.

Код для первого представления приведен ниже: import SwiftUI

struct ContentView: View {

var body: some View {
    NavigationView {
        VStack {
            Spacer()
            Text("LifePath")
                .font(.system(size: 48, weight: .semibold))
                .padding(.bottom)
            Spacer()
            
            
            
            NavigationLink(destination: ViewChanger()) {
                Text("Get Started")
                    .font(.headline)
                    .navigationBarBackButtonHidden(true)
            }
        }
        .padding()
    }
}

}

кнопка "Назад" отображается на экране 2

Первый просмотр


person Community    schedule 03.04.2021    source источник


Ответы (2)


Измените расположение вашего модификатора navigationBackButtonHidden так, чтобы он фактически изменял представление, которое вы собираетесь (а не метку NavigationLink):

struct ContentView: View {
    
    var body: some View {
        NavigationView {
            VStack {
                Spacer()
                Text("LifePath")
                    .font(.system(size: 48, weight: .semibold))
                    .padding(.bottom)
                Spacer()
                
                
                
                NavigationLink(destination: ViewChanger()
                                .navigationBarBackButtonHidden(true) // <-- Here
                ) {
                    Text("Get Started")
                        .font(.headline)
                        
                }
            }
            .padding()
        }
    }
}

Если вы хотите, чтобы исчезла не только кнопка «Назад», но и вся панель заголовка, вы можете использовать модификатор .navigationBarHidden(true).

Кроме того, если вы вообще запустите это на iPad, вы, вероятно, захотите добавить .navigationViewStyle(StackNavigationViewStyle()) за пределами вашего NavigationView

person jnpdx    schedule 03.04.2021

Если вы используете NavigationLink (в NavigationView), представление будет отправлено. Если вы хотите заменить представление, вы можете сделать это с помощью оператора if.

Например, это можно реализовать так:

struct ContentView: View {
    @State var showSecondView: Bool = false

    var body: some View {
        if !showSecondView {
            NavigationView {
                VStack {
                    Spacer()
                    Text("LifePath")
                        .font(.system(size: 48, weight: .semibold))
                        .padding(.bottom)
                    Spacer()
            
                    Button(action: { showSecondView = true }) {
                        Text("Get Started")
                            .font(.headline)
                    }
            }
            .padding()
        } else {
            TabView {
                // ...
            }
        }
    }
}
person Johannes Starke    schedule 03.04.2021