Навигационная ссылка вид не загружается; Черный экранIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Навигационная ссылка вид не загружается; Черный экран

Сообщение Anonymous »

Пытаясь загрузить представление в цикле, используя Navlink, но когда я нажимаю на этикетку, он просто идет на черный экран на несколько секунд и возвращается к корневому представлению. Код компилизируется нормальным в предварительном просмотре, и нет кодов ошибок. Когда я запускаю симулятор, я получаю это сообщение в отладчике: < /p>

Навигационная связь представляет значение типа «миссии», но не существует совпадающего объявления о навигации, видно из расположения ссылки. Ссылка не может быть активирована. Код: < /p>
struct ContentView: View {
@State private var gridList = true

let missions = MissionC()

let layout = [
GridItem(.adaptive(minimum: 150))
]

var body: some View {
NavigationStack {
Group {
if gridList {
ScrollView {
LazyVGrid(columns: layout) {
ForEach(missions.missionItem) { mission in
NavigationLink(value: mission) {
NavLink(mission: mission)
}
}
}
.navigationDestination(for: Missions.self) { mission in
MissionDetails(missions: mission)
}
.padding([.horizontal, .bottom])
}

} else {
List {
ForEach(missions.missionItem) {mission in
NavigationLink(value: mission) {
NavLink2(mission: mission)
}
}
.listRowBackground(Color.lightBackground)
}
.navigationDestination(for: Missions.self) { mission in
MissionDetails(missions: mission)
}
.scrollContentBackground(.hidden)
}

}
.navigationTitle("Moonshot")
.background(.darkBackground)
.preferredColorScheme(.dark)
.toolbar {
Button(gridList ? "Grid View" : "List View", systemImage: gridList ? "rectangle.grid.2x2": "list.bullet") {
gridList.toggle()
}
}
}
}
}
< /code>
Missions Struct и Missionc Class: < /p>
struct Missions: Identifiable, Codable, Hashable {
struct Crew: Codable, Hashable {
let name: String
let role: String
}

let id: Int
let launchDate: Date?
let crew: [Crew]
let description: String

var displayName: String {
"Apollo \(id)"
}

var image: String {
"apollo\(id)"
}

var getLaunchDate: String {
guard let a = launchDate else {
return "N/A"
}

return "\(a.formatted(date: .abbreviated, time: .omitted))"
}
}

class MissionC {
var missionItem: [Missions] = Bundle.main.decode("missions")
}
< /code>
пытался выяснить это со вчерашнего дня, перестроил код представления контента с нуля и не нашел ничего плохого. Попробовал загрузить в ошибочном представлении кучу других способов, и это сработало, поэтому я не думаю, что проблема есть. Кроме того, попробовал другой вид в Navlink, и он сработал, поэтому я оторван. Кажется, в взаимодействии между этим конкретным типом Navlink и этим конкретным представлением происходит что -то странное. Также пробовал кеш для очистки, папку сборки, удаление производных и т. Д. Ни один из которых не работал. MissionDetails: < /p>
struct MissionDetails: View {
var missions: Missions
let astronauts = AstronautC()

@State private var showingAlert = false
@State private var alertTitle = ""
@State private var alertMessage = ""
@State private var frostedOver = false

var body: some View {
NavigationStack {
ZStack {
ScrollView {
VStack {
Image(missions.image)
.resizable()
.scaledToFit()
.containerRelativeFrame(.horizontal) {size, axis in
size * 0.8
}

HStack{
Text("Launch date:")
.font(.title3)
.bold()

Text(missions.getLaunchDate)
}

}
.padding(.top)

rectangle()

VStack(alignment: .leading) {

Spacer()

Text(missions.description)
.padding(.horizontal)

rectangle()
}

Text("Crew")
.font(.title3)
.bold()

VStack(alignment: .leading) {
ForEach(missions.crew, id: \.self) { crew in
Image(crew.name)
.resizable()
.scaledToFit()
.clipShape(.capsule)
.overlay(
Capsule()
.strokeBorder(.white, lineWidth: 1)
)

let person = astronauts.astronautItem[crew.name]

Button {
alertTitle = "\(person?.name ?? "")"
alertMessage = "\(person?.description ?? "")"

withAnimation {
frostedOver = true
}

showingAlert = true
} label: {
Text(person?.name ?? "")
.font(.headline)
}

Text(crew.role)
}
}
.padding([.horizontal, .bottom])
}
.navigationTitle(missions.displayName)
.navigationBarTitleDisplayMode(.inline)
.alert(alertTitle, isPresented: $showingAlert) {
Button("Ok") {
withAnimation {
frostedOver = false
}
showingAlert = false
}
} message: {
Text(alertMessage)
}
.background(.darkBackground)

if frostedOver {
Color(.clear)
.background(.ultraThinMaterial)
.ignoresSafeArea()
}
}
}
}
}

#Preview {
let missions = MissionC()

MissionDetails(missions: missions.missionItem[0])
.preferredColorScheme(.dark)
}
< /code>
Navlink is: < /p>
struct NavLink: View {
var mission: Missions

var body: some View {
VStack {
Image(mission.image)
.resizable()
.scaledToFit()
.frame(width: 100, height: 100)
.padding()

VStack {
Text(mission.displayName)
.font(.headline)
.foregroundStyle(.white)

Text(mission.getLaunchDate)
.font(.caption)
.foregroundStyle(.gray)
}
.padding(.vertical)
.frame(maxWidth: .infinity)
.background(.lightBackground)
}
.clipShape(.rect(cornerRadius: 8))
.overlay(
RoundedRectangle(cornerRadius: 10)
.stroke(.lightBackground)
)
}
}

#Preview {
let preview = MissionC()

NavLink(mission: preview.missionItem[0])
}
< /code>
Navlink2 is: < /p>
struct NavLink2: View {
var mission: Missions

var body: some View {
HStack(spacing: 40) {
Image(mission.image)
.resizable()
.scaledToFit()
.frame(width: 60, height: 60)
.padding()

VStack {
Text(mission.displayName)
.font(.headline)
.foregroundStyle(.white)

Text(mission.getLaunchDate)
.font(.caption)
.foregroundStyle(.gray)
}
}
}
}

#Preview {
let preview = MissionC()

NavLink2(mission: preview.missionItem[0])
.preferredColorScheme(.dark)
}



Подробнее здесь: https://stackoverflow.com/questions/796 ... ack-screen
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»