【发布时间】:2020-10-27 03:59:57
【问题描述】:
我创建了以下结构,这是我希望在 SwiftUI 的列表中使用的数组的一个简短示例:
import Foundation
import SwiftUI
struct Rune: Identifiable {
var runeName: String
var runeImage: String
var runeDescription: String
let id = UUID()
}
let runesArray = [Rune(runeName: "Fehu", runeImage: String(("Fehu.png")), runeDescription: "(Description Goes Here"),
Rune(runeName: "Uruz", runeImage: String(("Uruz.png")), runeDescription: "(Description Goes Here"),
Rune(runeName: "Thurisaz", runeImage: String(("Thurisaz.png")), runeDescription: "(Description Goes Here"]
当我使用以下代码时,我的图像没有显示,但是当我单击该行并转到我的 DetailView 时,我的文本 runeName 文本 runeDescription 会按预期显示,但我不知道为什么:
内容视图:
import SwiftUI
struct ContentView: View {
var body: some View {
NavigationView {
List(runesArray) { rune in
NavigationLink(destination: DetailView(rune: rune)) {
RuneRow(rune: rune)
}
}
.navigationBarTitle("Rune Companion")
}
}
}
struct ContentView_Previews: PreviewProvider {
static var previews: some View {
ContentView()
}
}
struct RuneRow: View {
let rune: Rune
var body: some View {
HStack {
Image(rune.runeImage)
.resizable()
.aspectRatio(contentMode: .fit)
.frame(width: 60, height: 60)
Spacer()
Text(rune.runeName)
.font(.title)
.fontWeight(.bold)
Spacer()
}
}
}
详细视图:
import SwiftUI
struct DetailView: View {
let rune: Rune
var body: some View {
NavigationView {
VStack {
Spacer()
Image(rune.runeImage)
.resizable()
.aspectRatio(contentMode: .fill)
.frame(width: 200, height: 200)
Spacer()
Text(rune.runeDescription)
.padding(.horizontal)
Spacer()
}
.navigationBarTitle(rune.runeName)
.navigationBarTitleDisplayMode(.large)
}
}
}
struct DetailView_Previews: PreviewProvider {
static var previews: some View {
DetailView(rune: runesArray[0])
}
}
当我将Image(rune.runeImage) 更改为Image("Fehu") 时,Fehu 的图像确实出现了,但它应该填充了所有三行,表明我的图像可以成功加载。任何想法我做错了什么?
【问题讨论】:
标签: ios xcode swiftui swiftui-list