我刚刚开始学习 SwiftUI,遵循 Apple 在 this 链接上构建 iOS 应用程序的教程。我从提供的框架应用程序开始,并在最新的 Xcode 中一步步进行操作。
CardView
没有看到我应该看到的内容,而是只显示一个空白的白色矩形。CardView
中的任何细节。没有颜色、文本或图标,只有一个空白的白色矩形。除了简单地将代码与固定示例进行比较之外,我完全不知道如何调试它。欢迎任何建议。
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 预览中从 Apple 已经完成的示例代码中看到的代码:
将我构建的代码与 Apple 提供的代码进行比较会突出问题,这似乎是合理的,但出现了零差异。项目中的其他两个视图工作正常。除了这个来源之外,还有其他重要的模块吗,
CardView.swift
?
我遇到了同样的问题,发现我错过了教程的“创建卡片视图 -> 第 1 部分:创建颜色主题”部分中的第 5 步
对于不熟悉 Xcode 的人来说,我认为此步骤中的说明不是很清楚。我通过从示例项目的下载版本导入资源解决了这个问题。尝试这些步骤
完成后,您的资产文件应如下所示。作为奖励,您可以使用这些相同的步骤导入应用程序图标。
scrum.color.accessibleFontColor
应用于卡的 foregroundColor
。所以所有的标签、图片、文字等都会受到影响。
accessibleFontColor
似乎根据父颜色返回 black
或 white
(在本例中为 scrum.color
)
似乎
Color("Design")
您传递的预览正在返回 clear
颜色,因为起始项目中的资源中没有名称为 Design
的颜色。因此预览显示默认的白色作为卡片背景。但它也使用 white
颜色作为前景。所以您会在结果中看到一张纯白色卡片。
注释掉
.foregroundColor(scrum.color.accessibleFontColor)
或者添加资源颜色并按预期命名。
或者给卡片添加手动背景
或者下载完整版本并将该过程逆向执行到您所在的位置。
我从教程中下载了项目文件,我发现有一个您可能错过的文件。你可以检查示例代码中的 Models 文件夹,有一个名为
Color+Codable.swift
的文件负责这个 accessibleFontColor
的事情。
这是由未定义的“设计”颜色引起的。
从Apple的示例项目中复制
Assets.xcassets
中的“设计”颜色,并将颜色的定义放在项目的Assets.xcassets
目录下可以解决您的问题。
这太疯狂了,我快要生气了,这绝对是苹果没有写清楚这个教程的问题。代码完全一样,但是除非你从apple.com导入“主题”资源,否则不会显示正确的颜色,Mike的回答帮助了我,非常感谢!