微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

应用小部件仅在主屏幕上显示为灰色

如何解决应用小部件仅在主屏幕上显示为灰色

我正在使用故事板制作应用程序,并在稍后向其中添加小部件。 我在主屏幕上的小部件变灰了。

greyed out widgets

在小部件抽屉中打开时看起来不错。

fine widgets

这是我的小部件 UI 代码

ZStack {
        Image(affirmationBGImage)
            .resizable()
            .scaledToFill()
            .edgesIgnoringSafeArea(.all)
        HStack {
            Spacer(minLength: 5)
            HStack {
                Text(affirmationText)
                    .font(.headline)
                    .foregroundColor(.black)
            }
            .background(Color.white.opacity(0.2))
            .cornerRadius(5)
            Spacer(minLength: 5)
        }
        .padding(0)
    }

这也是我的时间线类代码

import WidgetKit
import SwiftUI
import Intents

struct Provider: IntentTimelineProvider {
    func placeholder(in context: Context) -> SimpleEntry {
        SimpleEntry(date: Date(),affirmationDetails: AffirmationWidgetDetails.random(),configuration: ConfigurationIntent())
    }
    
    func getSnapshot(for configuration: ConfigurationIntent,in context: Context,completion: @escaping (SimpleEntry) -> ()) {
        let entry = SimpleEntry(date: Date(),configuration: configuration)
        completion(entry)
    }
    
    func getTimeline(for configuration: ConfigurationIntent,completion: @escaping (Timeline<Entry>) -> ()) {
        var entries: [SimpleEntry] = []
        
        // Generate a timeline consisting of five entries an hour apart,starting from the current date.
        let currentDate = Date().zeroSeconds
        for hourOffset in 0 ..< 60 {
            let entryDate = Calendar.current.date(byAdding: .minute,value: hourOffset,to: currentDate!)!
            let entry = SimpleEntry(date: entryDate,configuration: configuration)
            entries.append(entry)
        }
        
        let timeline = Timeline(entries: entries,policy: .atEnd)
        completion(timeline)
    }
}

struct SimpleEntry: TimelineEntry {
    let date: Date
    let affirmationDetails: AffirmationWidgetDetails
    let configuration: ConfigurationIntent
}

struct AffirmationWidgetEntryView: View {
    
    var entry: Provider.Entry
    
    var body: some View {
        AffirmationWidgetView(affirmationDetails: entry.affirmationDetails)
    }
    
}

@main
struct AffirmationWidget: Widget {
    let kind: String = "AffirmationWidget"
    
    var body: some WidgetConfiguration {
        IntentConfiguration(
            kind: kind,intent: ConfigurationIntent.self,provider: Provider()
        ) { entry in
            AffirmationWidgetEntryView(entry: entry)
        }
        .configurationdisplayName("Random Affirmation")
        .description("displays a widget with an affirmation")
        .supportedFamilies([.systemLarge,.systemMedium,.systemSmall])
    }
}

struct AffirmationWidget_Previews: PreviewProvider {
    static var previews: some View {
        AffirmationWidgetEntryView(entry: SimpleEntry(date: Date(),configuration: ConfigurationIntent()))
            .previewContext(WidgetPreviewContext(family: .systemSmall))
    }
}

所以我的问题是如何解决这个问题,以便它在主屏幕上正确显示,就像它在小部件抽屉上显示的一样?

注意它在模拟器上运行良好,但由于某种原因在设备上运行不正常。

解决方法

小部件允许的内存有限,我减少了我使用的图像文件的大小,现在它运行良好。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。