【问题标题】:Hiding Picker's focus border on watchOS in SwiftUI在 SwiftUI 中隐藏 Picker 在 watchOS 上的焦点边界
【发布时间】:2020-12-18 17:14:56
【问题描述】:
我需要使用 Picker 视图,但我没有看到任何隐藏绿色焦点边框的选项。
代码:
@State private var selectedIndex = 0
var values: [String] = (0 ... 12).map { String($0) }
var body: some View {
Picker(selection: $selectedIndex, label: Text("")) {
ForEach(0 ..< values.count) {
Text(values[$0])
}
}
.labelsHidden()
}
【问题讨论】:
标签:
swiftui
watchos
swiftui-picker
【解决方案1】:
以下扩展在选择器边框上放置了一个黑色覆盖层。
结果
代码
extension Picker {
func focusBorderHidden() -> some View {
let isWatchOS7: Bool = {
if #available(watchOS 7, *) {
return true
}
return false
}()
let padding: EdgeInsets = {
if isWatchOS7 {
return .init(top: 17, leading: 0, bottom: 0, trailing: 0)
}
return .init(top: 8.5, leading: 0.5, bottom: 8.5, trailing: 0.5)
}()
return self
.overlay(
RoundedRectangle(cornerRadius: isWatchOS7 ? 8 : 7)
.stroke(Color.black, lineWidth: isWatchOS7 ? 4 : 3.5)
.offset(y: isWatchOS7 ? 0 : 8)
.padding(padding)
)
}
}
用法
确保.focusBorderHidden() 是第一个修饰符。
Picker( [...] ) {
[...]
}
.focusBorderHidden()
[...]
【解决方案2】:
在Picker 上,可以添加类似这样的东西来掩盖绿色边框。
@ScaledMetric var borderWidth: CGFloat = 5 // or it can be 3
Picker {
...
}.border(Color.black, width: borderWidth)