设置 WKInterfacePicker 颜色(文本或轮廓)

Set WKInterfacePicker color (text or outline)

有谁知道如何设置 WKInterfacePicker 的文本颜色或焦点样式轮廓颜色?

我没有在 Interface Builder 中看到它,我无法在代码中找到任何 属性 可以设置它的项目。

这里是 IB:

您不能更改默认选择器的颜色。

但是您可以在不减慢应用程序速度的情况下操纵视图使其看起来像它。

我用 2 WKInterfaceGroup 垂直对齐创建了这个。上面的组有一个 WKInterfaceLabel 用于自定义标题标签,下面的组有一个 WKInterfacePickerWKInterfacePicker 配置如下:

Style: List 
Focus Style: None
Indicator: Disabled 

这将隐藏默认的色调和标题,以便我们可以创建自定义的。

在标签的 WKInterfaceGroup 中,我设置了圆角半径和背景颜色。在选择器的 WKInterfaceGroup 中,我设置了一个背景图像,它是一个描边圆角矩形的图像。

我使用 pickerDidFocuspickerDidResignFocus 回调来更改标签 WKInterfaceGroup 的背景颜色,以及选择器 WKInterfaceGroup 的背景图像。

每当索引更改时使用 picker action 来更新自定义操作标签。

结果是一个自定义选择器,看起来与 built-in WKInterfacePicker 完全一样,但具有自定义色调。

事实上,所选答案对我(WatchOS 5、6)不起作用,可能是因为我有两个并排的 WKInterfacePicker 对象。选择器用完了周围组中的所有 space,因此背景(颜色或图像)完全不可见。

然而,根据@honcheng 的回答,我找到了一个 'work around',它创建了一个 'custom color' 选择指标。但是和原来的不太一样...

  • 创建一个包含 WKInterfacePicker 对象的 WKInterfaceGroup 对象。
  • 可选:将此组(及其所在的所有父组)的角半径设置为“0”[a]。
  • 在 'awakeWithContext:' 中对 WKInterfaceGroup 对象调用 'setContentInset:UIEdgeInsetsMake(1, 0, 1, 0)' [b] 并通过调用 'setBackgroundColor:UIColor.blackColor'.
  • 将其背景颜色设置为黑色
  • 在'pickerDidFocus:'回调中调用'setBackgroundColor:UIColor.redColor'[c]启用焦点指示器。
  • 在 'pickerDidResignFocus:' 回调中再次调用 'setBackgroundColor:UIColor.blackColor' 以移除焦点指示器。

这是最终选择指标的样子

[a]: 不幸的是,WKInterfacePicker 对象本身没有圆角半径,而是一个锐角矩形,所以如果你想要一个完整的矩形作为焦点指示器,选择器将在圆角上绘制角落。为避免这种情况,必须删除圆角半径。我决定改为创建 top/bottom 指标。该图像显示了一个小的 'glitch',其中圆角半径干扰了焦点指示(线的左侧)。当如上所述将所有拐角半径设置为“0”时,此故障已消除。

[b]: (1, 0, 1, 0) 在顶部和底部创建一个像素插入,当然也可以是一个完整的矩形 (1, 1, 1, 1).

[c]: 当然任何颜色(甚至是背景图片)都是可以的。

'glitch',其中 'cornerRadius' 未设置为 '0'