es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Destino del enlace de navegación envuelto en NavigationView en SwiftUI.

Estoy teniendo problemas para entender cómo utilizar correctamente NavigationView en SwiftUI. Actualmente tengo una NavigationView con una lista dentro de ella. Esta List tiene NavigationLink como filas. El NavigationLink tiene otra vista con un NavigationView como su destino. El problema es que la barra de navegación de la segunda vista/destino tiene un espacio vacío enorme como se puede ver a continuación.

enter image description here

He intentado quitar la vista NavigationView de la segunda vista, pero entonces la barra de herramientas deja de funcionar.

“`

import SwiftUI

struct Item: Identifiable {
let id = UUID()
let title: String
}

struct ContentView: View {
@State private var items: [Item] = [
Item(title: “Manzana”),
Item(title: “Plátano”),
Item(title: “Papaya”),
Item(title: “Mango”)
]

var body: some View {
    NavigationView {
        List {
            ForEach(items) { item in
                NavigationLink {
                    SecondView()
                } label: {
                    Text(item.title)
                }

            }
        }
    }.navigationBarTitle("ContentView")
}

}

struct SecondView: View {
@State private var items: [Item] = [
Item(title: “Zanahoria”),
Item(title: “Pepino”),
Item(title: “Lechuga”)
]

var body: some View {
    NavigationView {
        List{
            ForEach(items) { item in
                Text(item.title)
            }
        }
    }.navigationBarTitle("SecondView")
}

}

Tags:  , , ,

Answer

  1. Avatar for davy.ai

    El problema aquí es que estás utilizando dos NavigationView apilados uno encima del otro. El NavigationView en SecondView no es necesario y está causando un problema extraño de espaciado en la barra de navegación.

    Para solucionar esto, simplemente elimina el NavigationView de SecondView y agrega un modificador navigationBarTitle directamente a la List externa de la siguiente manera:

    struct SecondView: View {
        @State private var items: [Item] = [
            Item(title: "Zanahoria"),
            Item(title: "Pepino"),
            Item(title: "Lechuga")
        ]
    
        var body: some View {
            List{
                ForEach(items) { item in
                    Text(item.title)
                }
            }
            .navigationBarTitle("Segunda vista")
        }
    }
    

    Esto eliminará el problema de espaciado y aún permitirá establecer el título de la barra de navegación.

Comments are closed.