标签: widgetkit

在 iOS 14 的 SwiftUI 中的主应用程序和小部件之间共享数据

@main
struct ClockWidgetExt: Widget {
    private let kind: String = "ClockWidgetExt"
    
    public var body: some WidgetConfiguration {
        StaticConfiguration(kind: kind, provider: Provider(), placeholder: PlaceholderView()) { entry in
            HomeTestView()
        }
        .configurationDisplayName("My Widget")
        .description("This is an example widget.")
    }
}
Run Code Online (Sandbox Code Playgroud)

如何从我的主应用程序获取数据到小部件?

widget swift widgetkit swiftui ios14

14
推荐指数
1
解决办法
6349
查看次数

如何刷新Widget数据?

我的代码获取两个JSON变量,应该在我的小部件上显示它们。小部件保持空白。如果没有小部件,它会显示我的应用程序中的所有内容。

我究竟做错了什么?代码中的 API 仅用于测试,因此您也可以对其进行检查。是否需要更改某些内容才能使其显示在小部件中?

我的结构:

import Foundation

struct Results: Decodable {
    let data: [Post]
}

struct Post: Decodable, Identifiable {
    let id: String
    var objectID: String {
        return id
    }
    let home_name: String
    let away_name: String
}
Run Code Online (Sandbox Code Playgroud)

获取 JSON:

import Foundation

class NetworkManager: ObservableObject {
    
    @Published var posts = [Post]()
    
    @Published var test = ""
    @Published var test2 = ""
    
    func fetchData() {
        if let url = URL(string: "https://livescore-api.com/api-client/teams/matches.json?number=10&team_id=19&key=I2zBIRH3S01Kf0At&secret=6kLvfRivnqeNKUzsW84F0LISMJC1KdvQ&number=7&team_id=46") {
            let session = URLSession(configuration: .default)
            let task = …
Run Code Online (Sandbox Code Playgroud)

widget swift widgetkit swiftui

13
推荐指数
1
解决办法
7014
查看次数

Xcode 12 / iOS14 小部件“@main 并且必须提供主静态函数”错误

使用 Xcode 12 尝试为我的项目创建 Widget 应用程序扩展。

创建新的 Widget 目标后,我收到以下错误:

'Widget' is annotated with @main and must provide a main static function of type () -> Void or () throws -> Void.
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

widget widgetkit swiftui ios14 xcode12

12
推荐指数
2
解决办法
3910
查看次数

从 WidgetKit 小部件扩展检测应用程序启动

点击 WidgetKit 小部件会自动启动其父应用程序。如何检测我的应用程序是否是从其 WidgetKit 小部件扩展启动的?

我无法在应用程序AppDelegate和/或SceneDelegate.

ios swift widgetkit swiftui ios14

11
推荐指数
3
解决办法
5486
查看次数

从 SwiftUI 小部件点击执行深层链接

我有一个带有两个文本的简单小部件(中等大小),我想要的是能够执行深层链接以将用户引导到我的应用程序的特定部分,但我似乎找不到方法这样做。

我写的视图(非常简单):

HStack {
    Text("FIRST ITEM")    
    Spacer()
    Text("SECOND ITEM")
}
Run Code Online (Sandbox Code Playgroud)

我已经尝试更换

Text("SECOND ITEM")
Run Code Online (Sandbox Code Playgroud)

Link("SECOND ITEM destination: URL(string: myDeeplinkUrl)!)
Run Code Online (Sandbox Code Playgroud)

但它也不起作用。

widget ios swift widgetkit swiftui

11
推荐指数
2
解决办法
5238
查看次数

iOS 14 小部件在实时应用上显示为黑色

我正在开发使用 widgetkit 扩展的应用程序。我有一个奇怪的问题,比如小部件在开发端正确显示,但是当我让应用程序上线时,它会向用户显示空白(黑色)小部件。

开发应用程序时的屏幕截图。

发展

使应用程序上线时的屏幕截图。

现场申请

以下是我的小部件的代码

import SwiftUI
import WidgetKit
import UIKit

private struct Provider: TimelineProvider {

func placeholder(in context: Context) -> SimpleEntry {
    SimpleEntry(date: Date(), water: drunkGlassesInML.convertInMLfromLTR())
}

func getSnapshot(in context: Context, completion: @escaping (SimpleEntry) -> Void) {
    let entry = SimpleEntry(date: Date(), water: drunkGlassesInML.convertInMLfromLTR())
    completion(entry)
}

func getTimeline(in context: Context, completion: @escaping (Timeline<Entry>) -> Void) {
    var entries: [SimpleEntry] = []
    let  entryDate = Calendar.current.date(byAdding: .second, value: 10 , to: Date())!
    let entry = SimpleEntry(date: entryDate, water: drunkGlassesInML.convertInMLfromLTR()) …
Run Code Online (Sandbox Code Playgroud)

widget ios swift widgetkit ios14

11
推荐指数
1
解决办法
1877
查看次数

小部件预览使用了错误大小的系列

我有一个如下所示的小部件视图:

struct WidgetEntryView: View {
    var entry: Provider.Entry

    @Environment(\.widgetFamily) var family
    
    var body: some View {
        switch family {
        case .systemSmall:
            ZStack {
                VStack(spacing: 12) {
                    // ...
                }
                .padding(10)
                .frame(maxWidth: .infinity, maxHeight: .infinity)
            }
            .background(Color.red.edgesIgnoringSafeArea(.all))
        case .systemMedium:
            ZStack {
                VStack(spacing: 12) {
                    // ...
                }
                .padding(10)
                .frame(maxWidth: .infinity, maxHeight: .infinity)
            }
            .background(Color.blue.edgesIgnoringSafeArea(.all))
        default:
            ZStack {
                VStack(spacing: 12) {
                    // ...
                    
                }
                .padding(10)
                .frame(maxWidth: .infinity, maxHeight: .infinity)
            }
            .background(Color.black.edgesIgnoringSafeArea(.all))
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

该小部件支持所有 3 个主要尺寸系列:

struct MyWidget: Widget {
    let …
Run Code Online (Sandbox Code Playgroud)

ios widgetkit swiftui

11
推荐指数
1
解决办法
1152
查看次数

需要帮助使 iOS 14 Widget 显示来自 REST api 的内容

最初的问题是在 Apple 论坛上,但没有人可以提供帮助。 https://developer.apple.com/forums/thread/654967?answerId=622833022#622833022

我决定问 SO。

问题

我正在开发一个显示来自 REST api 的内容的小部件扩展。它显示更新的以下股票信息。

我的小部件用户界面

Widgets Code-along,第 3 部分:推进时间线对我没有帮助。

调查给我带来了一个虽然“这是 iOS 测试版的错误”:

public func timeline(
    for configuration: ConfigurationIntent,
    with context: Context,
    completion: @escaping (Timeline<Entry>) -> ()
  ) {
    print("Provider.timeline: ")

    var entries: [SimpleEntry] = []

    let currentDate = Date()
    entries.append(SimpleEntry(
      date: Calendar.current.date(byAdding: .second, value: 15, to: currentDate)!,
      configuration: configuration
    ))
    
    let timeline = Timeline(entries: entries, policy: reloadPolicy)

    completion(timeline)
  }
Run Code Online (Sandbox Code Playgroud)

上面的代码Provider.timeline: 在 1 秒内打印14->19 次。


这是我处理网络请求但没有成功的代码:

public func timeline(
    for configuration: ConfigurationIntent,
    with …
Run Code Online (Sandbox Code Playgroud)

widget swift widgetkit swiftui ios14

10
推荐指数
1
解决办法
6973
查看次数

在 WidgetKit 中每分钟更新时间文本标签

是否可以在 Widget 中创建显示当前时间并实时更新的文本标签?

尝试创建时钟小部件,但小部件每 5 分钟仅更新 1 次。

  • 创建时间线没有帮助
  • “使小部件保持最新”不适用于当前时间,仅适用于计时器等。

widget swift widgetkit swiftui ios14

10
推荐指数
2
解决办法
4488
查看次数

iOS WidgetKit 小部件中的右对齐 Text(Date(), style: .timer) 文本

这是一个有趣的困境:我想制作一个可靠地“滴答”的计时器,但同时也在可预测的位置渲染符号,以便我可以通过添加背景来装饰计时器。由于 WidgetKit 的限制,我无法可靠地每秒渲染自己的文本,并且必须依赖特殊视图,例如Text(Date(), style: .timer)。但是,此视图可以根据剩余时间将时间呈现为XX:XXX:XX ,这没问题,但它也占用容器的整个宽度并左对齐,这使得最后一个:XX根据剩余时间移动。

\n

这是一个例子:

\n

在此输入图像描述

\n

以及生成它的代码:

\n
struct MyWidgetEntryView : View {    \n    var body: some View {\n        VStack {\n            Text(Date().addingTimeInterval(1000), style: .timer)\n                .font(.body.monospacedDigit())\n                .background(Color.red)\n            \n            Text(Date().addingTimeInterval(100), style: .timer)\n                .background(Color.green)\n                .font(.body.monospacedDigit())\n        }\n    }\n}\n
Run Code Online (Sandbox Code Playgroud)\n

问题:有没有一种方法可以在 WidgetKit 小部件中可靠地更新时间显示,使分钟和秒的符号始终呈现在相同的位置,并且不会根据剩余时间而移动?

\n

我无法弄清楚,请帮助我!

\n

\xe2\x80\x93巴格兰

\n

widgetkit swiftui

10
推荐指数
1
解决办法
1101
查看次数

标签 统计

widgetkit ×10

swiftui ×9

swift ×7

widget ×7

ios14 ×6

ios ×4

xcode12 ×1