iOS*_*Dev 10 ios swift widgetkit
我试图在视图中获取正确的小部件系列,但我总是获得.systemMedium值。这是我的观点:
import SwiftUI
struct MyView: View
{
@Environment(\.widgetFamily) var family
let entry: MyEntry
@ViewBuilder
var body: some View
{
switch family
{
case .systemSmall:
Text("systemSmall")
case .systemMedium:
Text("systemMedium")
case .systemLarge:
Text("systemLarge")
case .systemExtraLarge:
Text("systemExtraLarge")
}
}
}
Run Code Online (Sandbox Code Playgroud)
有什么想法为什么会发生这种情况吗?谢谢。
对我来说,起初这种情况是在 Xcode 中的预览中发生的,所以我四处搜索并实现了这些扩展:
// DEBUG
extension WidgetFamily: EnvironmentKey {
public static var defaultValue: WidgetFamily = .systemSmall
}
extension EnvironmentValues {
var widgetFamily: WidgetFamily {
get { self[WidgetFamily.self] }
set { self[WidgetFamily.self] = newValue }
}
}
Run Code Online (Sandbox Code Playgroud)
以及直接为预览指定家庭环境:
Group {
SWidgetEntryView(entry: SimpleEntry(date: Date()))
.previewContext(WidgetPreviewContext(family: .systemSmall))
.environment(\.widgetFamily, .systemSmall)
SWidgetEntryView(entry: SimpleEntry(date: Date()))
.previewContext(WidgetPreviewContext(family: .systemMedium))
.environment(\.widgetFamily, .systemMedium)
}
Run Code Online (Sandbox Code Playgroud)
这将解决预览期间的问题,但会弄乱设备上的小部件,因为它会覆盖widgetFamily环境变量。所有小部件尺寸都将具有您为 指定的不正确的系列环境defaultValue。
如果您的设备上出现此类问题,您可能实现了类似的扩展来使预览正常工作。删除它可以解决设备上的问题。我不确定预览的正确修复是什么。