【问题标题】: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)
      

      【讨论】:

        猜你喜欢
        • 2016-08-01
        • 1970-01-01
        • 2022-11-30
        • 1970-01-01
        • 1970-01-01
        • 2020-08-28
        • 2017-02-16
        • 1970-01-01
        • 2017-09-24
        相关资源
        最近更新 更多