#ios #swift #xcode #swiftui #preview
Вопрос:
Я только начинаю изучать SwiftUI, следуя руководству Apple по созданию приложения для 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
?
Ответ №1:
Я скачал файл проекта из учебника и обнаружил, что там есть файл, который вы, вероятно, пропустили. Вы можете проверить папку Models в примере кода, там есть файл под названием Color Codable.swift
, который отвечает за эту accessibleFontColor
штуку.
Ответ №2:
Понять проблему
scrum.color.accessibleFontColor
применяется кforegroundColor
карте. Итак, все ярлыки, изображения, тексты и т. Д. будут затронуты.accessibleFontColor
кажется, что возвращается либоblack
илиwhite
в соответствии с родительским цветом (scrum.color
в этом случае)- похоже
Color("Design")
, что вы передаете для предварительного просмотра возвращаемыйclear
цвет, потому что в стартовом проекте нет цвета с именемDesign
в активах. Таким образом, предварительный просмотр показывает белый цвет по умолчанию в качестве фона карты. Но он также используетwhite
цвет для переднего плана. Таким образом, в результате вы видите сплошную белую карточку.
Решения
- Прокомментируйте
.foregroundColor(scrum.color.accessibleFontColor)
- Или добавьте цвет активов и назовите его, как ожидалось.
- Или дайте карточке справку вручную
- Или загрузите завершенную версию и повторите процесс до того момента, на котором вы находитесь.
Ответ №3:
Это вызвано неопределенным цветом «Дизайна».
Скопируйте цвет «Дизайн» Assets.xcassets
из образца проекта Apple и поместите определение цвета в Assets.xcassets
каталог вашего проекта, чтобы решить вашу проблему.
Комментарии:
1. интересно, что когда я скопировал «Дизайн» и сохранил «.Цвет переднего плана(scrum.color.accessibleFontColor)», сборка завершилась неудачно, а затем я удалил «Дизайн» и раскомментировал .Цвет переднего плана(scrum.color.accessibleFontColor), затем отображается цвет.