【问题标题】:Apple's SwiftUI tutorial code doesn't display view contents in homemade copyApple 的 SwiftUI 教程代码在自制副本中不显示视图内容
【发布时间】:2021-07-16 21:12:21
【问题描述】:

我刚刚开始学习 SwiftUI,遵循 Apple 在 this 链接上构建 iOS 应用程序的教程。我从提供的骨架应用程序开始,并在最新的 Xcode 中逐步进行。 CardView 没有看到我应该看到的内容,而是只显示一个空白的白色矩形。

Apple 提供了一个完全构建的项目,它工作得很好。我已经比较了我从骨架项目中构建的代码与已完成项目附带的代码,它们看起来是相同的。然而,我自制的项目副本根本没有在CardView 中填写任何细节。没有颜色、文本或图标,只有一个空白的白色矩形。除了简单地将代码与罐头示例进行比较之外,我完全不知道如何调试它。欢迎任何建议。

这是 CardView.swift 的代码:

import SwiftUI

struct CardView: View {
    let scrum: DailyScrum
    var body: some View {
        VStack(alignment: .leading) {
            Text(scrum.title).font(.headline)
            Spacer()
            HStack {
                Label("\(scrum.attendees.count)", systemImage: "person.3")
                    .accessibilityElement(children: .ignore)
                    .accessibilityLabel(Text("Attendees"))
                    .accessibilityValue(Text("\(scrum.attendees.count)"))
                Spacer()
                Label("\(scrum.lengthInMinutes)", systemImage: "clock")
                    .padding(.trailing, 20)
                    .accessibilityElement(children: .ignore)
                    .accessibilityLabel(Text("Meeting length"))
                    .accessibilityValue(Text("\(scrum.lengthInMinutes) minutes"))
            }
            .font(.caption)
        }
        .padding()
        .foregroundColor(scrum.color.accessibleFontColor)

    }
}

struct CardView_Previews: PreviewProvider {
    static var scrum = DailyScrum.data[0]
    static var previews: some View {
        CardView(scrum: scrum)
            .background(scrum.color)
            .previewLayout(.fixed(width: 400, height: 60))
    }
}

这是我在 Xcode 的预览中从我的代码中看到的图像:

这是我在 Xcode 的预览中从 Apple 已经完整的示例代码中看到的:

将我构建的代码与 Apple 提供的代码进行比较似乎是合理的,但会出现零差异。项目中的其他两个视图工作正常。除了这个来源CardView.swift,还有其他重要的模块吗?

【问题讨论】:

    标签: ios swift xcode swiftui preview


    【解决方案1】:

    我从教程中下载了项目文件,发现有一个您可能错过的文件。您可以查看示例代码中的 Models 文件夹,有一个名为 Color+Codable.swift 的文件负责这个 accessibleFontColor 东西。

    【讨论】:

      【解决方案2】:

      了解问题

      1. scrum.color.accessibleFontColor 应用于卡的foregroundColor。所以所有的标签、图片、文字等都会受到影响。

      2. accessibleFontColor 似乎根据父颜色返回blackwhite(在这种情况下为scrum.color

      3. 您为预览传递的Color("Design") 似乎正在返回clear 颜色,因为在起始项目的资产中没有名称为Design 的颜色。所以预览显示默认的白色作为卡片背景。但它也使用white 作为前景颜色。因此,您会在结果中看到一张纯白色卡片。

      解决方案

      • 注释掉.foregroundColor(scrum.color.accessibleFontColor)

      • 或添加资产颜色并按预期命名。

      • 或者给卡片手动设置背景

      • 或者下载完整的版本,然后将过程反转到您所在的位置。

      【讨论】:

        【解决方案3】:

        这是由未定义的“设计”颜色引起的。

        从Apple的示例项目中复制Assets.xcassets中的“Design”颜色,并将颜色的定义放在项目的Assets.xcassets目录下可以解决您的问题。

        【讨论】:

        • 有趣的是,当我复制“设计”并保留“.foregroundColor(scrum.color.accessibleFontColor)”时,构建失败,然后我删除了“设计”并取消注释 .foregroundColor (scrum.color.accessibleFontColor),然后颜色显示。
        【解决方案4】:

        我遇到了同样的问题,发现我错过了tutorial的“创建卡片视图 -> 第 1 部分:创建颜色主题”部分中的 Step 5

        对于不熟悉 Xcode 的人,我认为此步骤中的说明在这里不是很清楚。我通过从示例项目的下载版本导入资源解决了这个问题。试试这些步骤

        • 在 Xcode 中打开 Assets 文件
        • 右键单击并选择导入
        • 导航到下载的项目,选择“Themes”目录,它是Assets.xcassets的子目录

        完成后,您的资产文件应如下所示。作为奖励,您可以使用这些相同的步骤来导入应用程序图标。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 2012-10-02
          • 2021-08-11
          • 2020-12-15
          • 1970-01-01
          • 2021-11-20
          • 2023-02-23
          • 2014-08-14
          • 1970-01-01
          相关资源
          最近更新 更多