You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

SwiftUI请求widgetFamily时始终返回.systemMedium是什么原因?

问题原因分析

你写的视图代码本身没有语法错误,固定返回.systemMedium通常是以下几种原因导致的:

  • 使用场景不符合要求:\.widgetFamily 是Widget Extension专属的环境变量,仅在Widget的渲染上下文中会被系统注入正确值。如果你将MyView放到主App的普通视图层级中调用,系统没有对应环境值,会默认返回.systemMedium。
  • 预览/调试时硬编码了固定值:如果是在Xcode预览中调试,没有给预览上下文指定正确的Widget尺寸,或者手动写死了.environment(\.widgetFamily, .systemMedium),就会固定返回该值。正确的多尺寸预览写法参考如下:
import WidgetKit
struct MyView_Previews: PreviewProvider {
    static var previews: some View {
        Group {
            MyView(entry: MyEntry())
                .previewContext(WidgetPreviewContext(family: .systemSmall))
            MyView(entry: MyEntry())
                .previewContext(WidgetPreviewContext(family: .systemMedium))
            MyView(entry: MyEntry())
                .previewContext(WidgetPreviewContext(family: .systemLarge))
        }
    }
}
  • Widget配置未声明支持的全尺寸:检查你的Widget主入口的配置,是否仅声明了.systemMedium作为唯一支持的尺寸,需要手动添加所有你需要支持的尺寸:
@main
struct MyWidget: Widget {
    let kind = "MyWidget"
    var body: some WidgetConfiguration {
        StaticConfiguration(kind: kind, provider: MyProvider()) { entry in
            MyView(entry: entry)
        }
        // 此处需要声明所有支持的尺寸
        .supportedFamilies([.systemSmall, .systemMedium, .systemLarge, .systemExtraLarge])
    }
}

内容的提问来源于stack exchange,提问作者iOS Dev

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.25 04:15:04