Apple 的 SwiftUI 教程代码在自制副本中不显示视图内容

问题描述 投票:0回答:5

我刚刚开始学习 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
5个回答
9
投票

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

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

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

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


3
投票

了解问题

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

  2. accessibleFontColor
    似乎根据父颜色返回
    black
    white
    (在本例中为
    scrum.color

  3. 似乎

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

解决方案

  • 注释掉

    .foregroundColor(scrum.color.accessibleFontColor)

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

  • 或者给卡片添加手动背景

  • 或者下载完整版本并将该过程逆向执行到您所在的位置。


3
投票

我从教程中下载了项目文件,我发现有一个您可能错过的文件。你可以检查示例代码中的 Models 文件夹,有一个名为

Color+Codable.swift
的文件负责这个
accessibleFontColor
的事情。


2
投票

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

从Apple的示例项目中复制

Assets.xcassets
中的“设计”颜色,并将颜色的定义放在项目的
Assets.xcassets
目录下可以解决您的问题。


0
投票

这太疯狂了,我快要生气了,这绝对是苹果没有写清楚这个教程的问题。代码完全一样,但是除非你从apple.com导入“主题”资源,否则不会显示正确的颜色,Mike的回答帮助了我,非常感谢!

© www.soinside.com 2019 - 2024. All rights reserved.