Обучающий код Apple SwiftUI не отображает содержимое просмотра в самодельной копии

#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:

Понять проблему

  1. scrum.color.accessibleFontColor применяется к foregroundColor карте. Итак, все ярлыки, изображения, тексты и т. Д. будут затронуты.
  2. accessibleFontColor кажется, что возвращается либо black или white в соответствии с родительским цветом ( scrum.color в этом случае)
  3. похоже Color("Design") , что вы передаете для предварительного просмотра возвращаемый clear цвет, потому что в стартовом проекте нет цвета с именем Design в активах. Таким образом, предварительный просмотр показывает белый цвет по умолчанию в качестве фона карты. Но он также использует white цвет для переднего плана. Таким образом, в результате вы видите сплошную белую карточку.

Решения

  • Прокомментируйте .foregroundColor(scrum.color.accessibleFontColor)
  • Или добавьте цвет активов и назовите его, как ожидалось.
  • Или дайте карточке справку вручную
  • Или загрузите завершенную версию и повторите процесс до того момента, на котором вы находитесь.

Ответ №3:

Это вызвано неопределенным цветом «Дизайна».

Скопируйте цвет «Дизайн» Assets.xcassets из образца проекта Apple и поместите определение цвета в Assets.xcassets каталог вашего проекта, чтобы решить вашу проблему.

Комментарии:

1. интересно, что когда я скопировал «Дизайн» и сохранил «.Цвет переднего плана(scrum.color.accessibleFontColor)», сборка завершилась неудачно, а затем я удалил «Дизайн» и раскомментировал .Цвет переднего плана(scrum.color.accessibleFontColor), затем отображается цвет.