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

watchOS:如何将Text作为WidgetKit控件标签实现类电池百分比显示效果?

在watchOS实现类似控制中心电池百分比的文本标签控件

我想在watchOS上实现一个以Text作为标签的控件,尝试了以下代码(其中provider与action为占位符):

StaticControlConfiguration(kind: "codecontrol", provider: PinProvider()) { pin in
    ControlWidgetButton("Current PIN", action: StartTimerIntent()) { bool in
        Text("1234")
    }
}

期望效果类似控制中心的电池百分比显示——纯文本标签,无按钮边框、背景,仅展示数值文本;但实际显示为带灰色边框的按钮样式,同时显示"Current PIN"标题和"1234"文本,与预期样式不符。

请问是否有可行的实现方法,或是这一效果仅能通过苹果私有API实现?


可行实现方案

你当前用的带标题参数的ControlWidgetButton是为可交互按钮设计的,自带按钮样式和标题+内容布局,所以会出现不符合预期的效果。要实现类似电池百分比的纯文本标签控件,有两种合规的公开API方案:

  1. 使用ControlWidgetLabel(watchOS 10+)
    苹果在watchOS 10中新增了ControlWidgetLabel,专门用于控制中心控件的纯文本展示,完全匹配你要的效果。代码示例:

    StaticControlConfiguration(kind: "codecontrol", provider: PinProvider()) { pin in
        ControlWidgetLabel {
            Text("1234")
        }
        .controlWidgetLabelStyle(.value) // 应用系统数值标签样式,和电池百分比一致
    }
    

    这个API是公开的,无需依赖私有接口,通过controlWidgetLabelStyle可调整样式,.value就是系统默认的数值展示样式。

  2. 自定义ControlWidgetButton样式(兼容旧版本)
    如果需要兼容watchOS 10以下版本,可以修改ControlWidgetButton的样式模拟纯文本标签:

    StaticControlConfiguration(kind: "codecontrol", provider: PinProvider()) { pin in
        ControlWidgetButton(action: StartTimerIntent()) {
            Text("1234")
        }
        .buttonStyle(.plain) // 移除按钮的边框和背景样式
        .controlWidgetButtonStyle(.value) // 应用数值标签的样式
    }
    

    这种方式会去掉按钮的默认交互样式,让它看起来和纯文本标签一致,同时保留控件的配置能力。

关键注意点

  • 别用带标题参数的ControlWidgetButton初始化方法,该方法会强制展示标题+内容的按钮布局,也就是你当前看到的不符合预期的效果。
  • 上述两种方案均使用苹果公开API,不需要依赖私有接口,完全合规。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.12 08:28:10