Ich arbeite mit WidgetKit an einem Swiftui -Widget und habe ein Problem gestoßen, bei dem der Inhalt des Widgets auf dem Startbildschirm nicht korrekt angezeigt wird. Der Widget -Inhalt wird als farbige Kästchen angezeigt, anstatt den erwarteten Text und Elemente anzuzeigen. Die Vorschau in Swiftui Canvas funktioniert jedoch vollkommen in Ordnung.
import WidgetKit
import SwiftUI
import Intents
//MARK: - Creating provider for providing data for widget
struct Provider: TimelineProvider {
typealias Entry = WidgetEntry
///Placeholder to show static data to user
func placeholder(in context: Context) -> WidgetEntry {
WidgetEntry(date: Date(),
topThreeMovies: [dummyMovie, dummyMovie, dummyMovie])
}
///Snapshot to use a preview when adding widgets
func getSnapshot(in context: Context, completion: @escaping (WidgetEntry) -> ()) {
/// Initial snapshot or loading type widget
let entry = WidgetEntry(date: Date(),
topThreeMovies: [dummyMovie, dummyMovie, dummyMovie])
completion(entry)
}
/// This function refreshes the widget for events
func getTimeline(in context: Context, completion: @escaping (Timeline) -> ()) {
let movieListViewModel = MovieListViewModel()
// Fetch the top three movies using the view model
movieListViewModel.fetchTopThreeMovies { topThreeMovies in
/// Initializing empty array for entries of WidgetEntry
var entries: [WidgetEntry] = []
///Set value for currentDate
let currentDate = Date()
/// Specifying data for entry
let entry = WidgetEntry(date: Date(),
topThreeMovies:topThreeMovies )
/// Refresh widget every 15 minutes
let refreshTime = Calendar.current.date(byAdding: .minute, value: 1, to: currentDate)
entries.append(entry)
/// Creating Timeline
let timeline = Timeline(entries: entries, policy: .after(refreshTime!))
completion(timeline)
}
}
}
// MARK: - Top Movies Widget Entry View
struct TopMoviesWidgetEntryView: View {
var entry: Provider.Entry
/// Access the widget family environment variable
@Environment(\.widgetFamily) var family
@ViewBuilder
var body: some View {
/// Switch based on the widget family
switch family {
case .systemMedium:
/// Display the MovieWidgetView for the medium widget size
MovieWidgetView(topThreeMovies: [dummyMovie, dummyMovie, dummyMovie])
default:
/// Handle other widget family types (fatalError is used here for simplicity)
fatalError("Unsupported widget family")
}
}
}
// MARK: - Widget Configuration
struct TopMoviesWidget: Widget {
/// Unique identifier for the widget
let kind: String = "TopMoviesWidget"
var body: some WidgetConfiguration {
StaticConfiguration(kind: kind, provider: Provider()) { entry in
TopMoviesWidgetEntryView(entry: entry)
}
.configurationDisplayName("Top Movies Widget")
.description("This is a widget of Today's Top Movies.")
.supportedFamilies([.systemMedium])
}
}
// MARK: - Create a preview for the widget entry view
struct TopMoviesWidget_Previews: PreviewProvider {
static var previews: some View {
TopMoviesWidgetEntryView(entry: WidgetEntry(date: Date(),
topThreeMovies: [dummyMovie, dummyMovie, dummyMovie]))
.previewContext(WidgetPreviewContext(family: .systemMedium))
}
}
import SwiftUI
import WidgetKit
/// Top Movies Widget View
struct MovieWidgetView: View {
// @StateObject var viewModel = MovieListViewModel()
var topThreeMovies: [Movie]
var body: some View {
HStack(alignment: .top) {
/// Show Week Day, Date and List Button
VStack(alignment: .leading) {
///Week Day
Text("\(Date().getFormattedWeekDay())")
.foregroundColor(.orange)
.bold()
///Date
Text("\(Date().getFormattedDate())")
.bold()
Spacer()
///List Button to navigate to Movie List screen
Button(action: {
/// Close the widget view and navigate to MovieListView
}) {
Label("", systemImage: "list.bullet.circle.fill").body
.foregroundColor(.orange)
.font(.system(size: 30))
}
}
.padding(EdgeInsets(top: 20, leading: 0, bottom: 0, trailing: 10))
Spacer()
///Top Three movies Listr
VStack(alignment: .leading) {
ForEach(0.. Void) {
isLoading = true
///get top three movies from all movies
for i in 0.. Int? {
return movies.firstIndex { $0.id == movie.id }
}
Ich arbeite mit WidgetKit an einem Swiftui -Widget und habe ein [url=viewtopic.php?t=11587]Problem[/url] gestoßen, bei dem der Inhalt des Widgets auf dem Startbildschirm nicht korrekt angezeigt wird. Der Widget -Inhalt wird als farbige Kästchen angezeigt, anstatt den erwarteten Text und Elemente anzuzeigen. Die Vorschau in Swiftui Canvas funktioniert jedoch vollkommen in Ordnung.[code]import WidgetKit import SwiftUI import Intents
//MARK: - Creating provider for providing data for widget
///Placeholder to show static data to user func placeholder(in context: Context) -> WidgetEntry { WidgetEntry(date: Date(), topThreeMovies: [dummyMovie, dummyMovie, dummyMovie]) }
///Snapshot to use a preview when adding widgets func getSnapshot(in context: Context, completion: @escaping (WidgetEntry) -> ()) { /// Initial snapshot or loading type widget let entry = WidgetEntry(date: Date(), topThreeMovies: [dummyMovie, dummyMovie, dummyMovie]) completion(entry) }
/// This function refreshes the widget for events func getTimeline(in context: Context, completion: @escaping (Timeline) -> ()) {
let movieListViewModel = MovieListViewModel()
// Fetch the top three movies using the view model movieListViewModel.fetchTopThreeMovies { topThreeMovies in
/// Initializing empty array for entries of WidgetEntry var entries: [WidgetEntry] = []
///Set value for currentDate let currentDate = Date()
/// Specifying data for entry let entry = WidgetEntry(date: Date(), topThreeMovies:topThreeMovies )
/// Refresh widget every 15 minutes let refreshTime = Calendar.current.date(byAdding: .minute, value: 1, to: currentDate) entries.append(entry)
/// Creating Timeline let timeline = Timeline(entries: entries, policy: .after(refreshTime!))
completion(timeline) } } }
// MARK: - Top Movies Widget Entry View
struct TopMoviesWidgetEntryView: View {
var entry: Provider.Entry
/// Access the widget family environment variable @Environment(\.widgetFamily) var family
@ViewBuilder var body: some View {
/// Switch based on the widget family switch family {
case .systemMedium: /// Display the MovieWidgetView for the medium widget size MovieWidgetView(topThreeMovies: [dummyMovie, dummyMovie, dummyMovie])
default: /// Handle other widget family types (fatalError is used here for simplicity) fatalError("Unsupported widget family") } } }
// MARK: - Widget Configuration
struct TopMoviesWidget: Widget {
/// Unique identifier for the widget let kind: String = "TopMoviesWidget"
var body: some WidgetConfiguration { StaticConfiguration(kind: kind, provider: Provider()) { entry in TopMoviesWidgetEntryView(entry: entry) } .configurationDisplayName("Top Movies Widget") .description("This is a widget of Today's Top Movies.") .supportedFamilies([.systemMedium]) } }
// MARK: - Create a preview for the widget entry view
struct TopMoviesWidget_Previews: PreviewProvider { static var previews: some View { TopMoviesWidgetEntryView(entry: WidgetEntry(date: Date(), topThreeMovies: [dummyMovie, dummyMovie, dummyMovie])) .previewContext(WidgetPreviewContext(family: .systemMedium)) } } [/code] [b] Hier ist mein Code für die Widget -Ansicht: [/b] [code]import SwiftUI import WidgetKit
/// Top Movies Widget View struct MovieWidgetView: View {
// @StateObject var viewModel = MovieListViewModel() var topThreeMovies: [Movie]
var body: some View { HStack(alignment: .top) {
/// Show Week Day, Date and List Button VStack(alignment: .leading) {
///Week Day Text("\(Date().getFormattedWeekDay())") .foregroundColor(.orange) .bold() ///Date Text("\(Date().getFormattedDate())") .bold()
Spacer()
///List Button to navigate to Movie List screen Button(action: { /// Close the widget view and navigate to MovieListView }) { Label("", systemImage: "list.bullet.circle.fill").body .foregroundColor(.orange) .font(.system(size: 30)) } } .padding(EdgeInsets(top: 20, leading: 0, bottom: 0, trailing: 10))
Spacer()
///Top Three movies Listr VStack(alignment: .leading) { ForEach(0.. Void) { isLoading = true
///get top three movies from all movies for i in 0.. Int? { return movies.firstIndex { $0.id == movie.id } } [/code] [b] Widget -Snapshot mit Dummydaten: [/b]
Ich erstelle eine App, die ein Uhr-Widget enthält. Ich möchte, dass das Widget möglichst jede Sekunde aktualisiert wird. Ich hatte etwas Glück beim Erstellen einer langen Zeitleiste – aber ich stoße...
Ich habe ein Android-Widget, das Webdienste verwendet, um die Daten im Widget abzurufen und anzuzeigen. Das Widget verfügt über eine Konfigurationsaktivität, die PreferenceActivity erweitert. Die...
Ich möchte textContentType zu meiner Anmeldeseite für Benutzer hinzufügen. Es funktionierte bei meinem Code nicht richtig, als ich ihn auf meinem Telefon mit iOS 18.2, Xcode 16.2 ausführte und ich...