为什么 Image 对象没有出现在 SwiftUI 教程中?

Why are Image objects not showing up from a SwiftUI tutorial?

我一直在尝试将布局更改为 Apple 提供的用于为手表制作 SwiftUI 应用程序的 WatchLandmarks 教程 (https://developer.apple.com/tutorials/swiftui/creating-a-watchos-app),但我无法弄清楚为什么无法加载图像我。它在完整的教程代码中工作得很好,唯一的区别在于我对 LandmarkList 和 LandmarkRow 布局的更改。

对 LandmarkList 的更改:

struct LandmarkList<DetailView: View>: View {
    @EnvironmentObject private var userData: UserData
    
    let detailViewProducer: (Landmark) -> DetailView
    
    var body: some View {
        VStack(alignment: .leading){
            Text(" Landmarks")
                .font(.system(size: 16))
            ScrollView(.horizontal, showsIndicators:false){
                HStack(alignment: .center){
                    ForEach(userData.landmarks) { landmark in
//                        if !self.userData.showFavoritesOnly || landmark.isFavorite {
                            NavigationLink(
                                destination: self.detailViewProducer(landmark).environmentObject(self.userData)) {
                                LandmarkRow(landmark: landmark)
                                    .frame( maxWidth: 70, maxHeight: 70, alignment: .leading)
                            }
//                        }
                    }
                }
                
            }.frame(minWidth: 0, maxWidth: .infinity, maxHeight: 100, alignment: .center)//.frame(width:150, height: 100)
            Text(self.userData.landmarks[0].name)
                .frame(minWidth: 0, maxWidth: .infinity, minHeight: 24, alignment: .center)
            HStack(spacing: 32){
                Button(action: { print("first button") }) {
                    Text("P")
                }.frame(minWidth: 20, maxWidth:50, minHeight: 20, maxHeight:50)
                    .background(Color.orange)
                    .clipShape(Circle())
                    .overlay(Circle().stroke(Color.clear, lineWidth: 4))
                    .shadow(radius: 10)
                Button(action: { print("second button")  }) {
                    Text("S")
                }.frame(minWidth: 20, maxWidth:50, minHeight: 20, maxHeight:50)
                    .background(Color.orange)
                    .clipShape(Circle())
                    .overlay(Circle().stroke(Color.clear, lineWidth: 4))
                    .shadow(radius: 10)
            }.frame(minWidth: 0, maxWidth: .infinity, maxHeight: 100, alignment: .center)
//        List {
//            Toggle(isOn: $userData.showFavoritesOnly) {
//                Text("Show Favorites Only")
//            }
//
//            ForEach(userData.landmarks) { landmark in
//                if !self.userData.showFavoritesOnly || landmark.isFavorite {
//                    NavigationLink(
//                    destination: self.detailViewProducer(landmark).environmentObject(self.userData)) {
//                        LandmarkRow(landmark: landmark)
//                    }
//                }
//            }
//        }
//        .navigationBarTitle(Text("Landmarks"))
        }.frame(maxWidth: .infinity, minHeight:200, maxHeight: .infinity, alignment: .leading)
    }
}

对 LandmarkRow 的更改

struct LandmarkRow: View {
    var landmark: Landmark

    var body: some View {
        HStack {
            landmark.image
                .resizable()
                .frame(width: 50, height: 50)
                .cornerRadius(8.0)
//            Text(landmark.name)
//            Spacer()
//
//            if landmark.isFavorite {
//                Image(systemName: "star.fill")
//                    .imageScale(.medium)
//                    .foregroundColor(.yellow)
//            }
        }
    }
}

我做错了什么?

尝试在图像上调用 .renderingMode(.original)

您的图片资源有两种渲染模式:

  • 原创
  • 模板

原始模式将按原样描绘图像资产,而模板模式会将图像的所有 non-transparent 部分变成您可以设置的一种颜色。默认颜色为黑色。 注意:Apple 文档中没有可用的概述。 在本教程中,您将了解 SwiftUI 中的渲染模式是什么以及如何使用它。