Виджет WidgetKit SwiftUI не отображает контент должным образом на главном экранеIOS

Программируем под IOS
Ответить Пред. темаСлед. тема
Anonymous
 Виджет WidgetKit SwiftUI не отображает контент должным образом на главном экране

Сообщение Anonymous »


Я работаю над виджетом SwiftUI, используя WidgetKit, и столкнулся с проблемой, из-за которой содержимое виджета некорректно отображается на главном экране. Содержимое виджета отображается в виде цветных прямоугольников вместо ожидаемого текста и элементов. Однако предварительный просмотр в SwiftUI Canvas работает отлично.

Вот мой код виджета:

импортировать WidgetKit импортировать SwiftUI импорт намерений //МАРК: - Создание провайдера для предоставления данных для виджета Поставщик структуры: TimelineProvider { typealias Entry = WidgetEntry ///Заполнитель для отображения статических данных пользователю заполнитель func (в контексте: Context) -> WidgetEntry { WidgetEntry(дата: Дата(), topThreeMovies: [dummyMovie, dummyMovie, dummyMovie]) } ///Снимок для использования предварительного просмотра при добавлении виджетов func getSnapshot(в контексте: Контекст, завершение: @escaping (WidgetEntry) -> ()) { /// Виджет исходного снимка или типа загрузки пусть запись = WidgetEntry(дата: Дата(), topThreeMovies: [dummyMovie, dummyMovie, dummyMovie]) завершение (запись) } /// Эта функция обновляет виджет для событий func getTimeline(в контексте: Контекст, завершение: @escaping (Timeline) -> ()) { пусть MovieListViewModel = MovieListViewModel() // Получение трех лучших фильмов с использованием модели представления MovieListViewModel.fetchTopThreeMovies { topThreeMovies в /// Инициализация пустого массива для записей WidgetEntry записи var: [WidgetEntry] = [] ///Установим значение для currentDate пусть текущаяДата = Дата() /// Указываем данные для входа пусть запись = WidgetEntry(дата: Дата(), topThreeMovies:topThreeMovies ) /// Обновляем виджет каждые 15 минут пусть обновитьВремя = Calendar.current.date(byAdding: .минута, значение: 1, to: currentDate) записи.append(запись) /// Создание временной шкалы let timeline = Timeline(записи: записи, политика: .after(refreshTime!)) завершение (сроки) } } } // ОТМЕТКА: - Просмотр записи виджета «Лучшие фильмы» структура TopMoviesWidgetEntryView: Просмотр { запись переменной: Provider.Entry /// Доступ к переменной среды семейства виджетов @Environment(\.widgetFamily) семейство переменных @ViewBuilder var body: some View { /// Переключение на основе семейства виджетов переключить семейство { случай .systemMedium: /// Отображение MovieWidgetView для виджета среднего размера MovieWidgetView(topThreeMovies: [dummyMovie, dummyMovie, dummyMovie]) по умолчанию: /// Обработка других типов семейства виджетов (здесь для простоты используется fatalError) FatalError("Неподдерживаемое семейство виджетов") } } } // ОТМЕТКА: - Конфигурация виджета структура TopMoviesWidget: Виджет { /// Уникальный идентификатор виджета let kind: String = "TopMoviesWidget" var body: some WidgetConfiguration { StaticConfiguration(вид: вид, поставщик: Provider()) {запись в TopMoviesWidgetEntryView (запись: запись) } .configurationDisplayName("Виджет лучших фильмов") .description("Это виджет списка лучших фильмов сегодняшнего дня.") .supportedFamilies([.systemMedium]) } } // ОТМЕТКА: - Создать предварительный просмотр для представления записи виджета. структура TopMoviesWidget_Previews: PreviewProvider { статические предварительные просмотры var: some View { TopMoviesWidgetEntryView(запись: WidgetEntry(дата: Дата(), topThreeMovies: [dummyMovie, dummyMovie, dummyMovie])) .previewContext(WidgetPreviewContext(семейство: .systemMedium)) } } Вот мой код для виджета:

импортировать SwiftUI импортировать WidgetKit /// Виджет лучших фильмов структура MovieWidgetView: Посмотреть { // @StateObject var viewModel = MovieListViewModel() var topThreeMovies: [Фильм] var body: some View { HStack(выравнивание: .top) { /// Показать день недели, дату и кнопку списка VStack(выравнивание: .leading) { ///День недели Text("\(Date().getFormattedWeekDay())") .foregroundColor(.оранжевый) .смелый() ///Дата Текст("\(Дата().getFormattedDate())") .смелый() Разделитель() ///Кнопка списка для перехода к экрану списка фильмов Кнопка (действие: { /// Закрываем вид виджета и переходим к MovieListView }) { Label("", systemImage: "list.bullet.circle.fill").body .foregroundColor(.оранжевый) .font(.system(размер: 30)) } } .padding(EdgeInsets(верхнее: 20, ведущее: 0, нижнее: 0, завершающее: 10)) Разделитель() ///Три лучших фильма Listr VStack(выравнивание: .leading) { ForEach(0.. Void) { isLoading = правда ///получим три лучших фильма из всех фильмов для меня в 0.. Int? { return Movies.firstIndex { $0.id == movie.id } } Снимок виджета с фиктивными данными:


Изображение


Виджет на главном экране:


Изображение

Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «IOS»