【发布时间】:2020-07-14 02:48:59
【问题描述】:
在 macOS Big Sur 中,所有内置搜索框控件的外部都会发光以显示焦点。如何在我的 SwiftUI 应用中实现这种效果?
我建立了一个看起来很相似的搜索栏,但它仍然有一个看起来很糟糕的矩形对焦环。我可以完全关闭对焦环,但这也不是我想要的。我想要外在的光芒。
这是我当前的 SwiftUI 代码。请注意 NSTextField focusRingType 覆盖。有了它,我可以关闭对焦环,但这不是我想要的。默认给了我矩形,不好的焦点。看起来外部将是票,但它产生与默认相同的结果。我想知道这是否只是当前 Big Sur/Xcode/SwiftUI 开发人员测试版中的一个错误。
import SwiftUI
struct SearchBarView: View {
@Binding var searchText: String
var body: some View {
HStack {
TextField("Search ...", text: self.$searchText)
.textFieldStyle(PlainTextFieldStyle())
.padding(7)
.padding(.horizontal, 25)
.background(Color("systemGray6"))
.cornerRadius(8)
.overlay(
HStack {
Image(systemName: "magnifyingglass")
.foregroundColor(.gray)
.frame(minWidth: 0, maxWidth: .infinity, alignment: .leading)
.padding(.leading, 10)
}
)
.padding(.horizontal, 10)
}
.padding()
}
}
struct SearchBarView_Previews: PreviewProvider {
static var previews: some View {
VStack {
SearchBarView(searchText: .constant(""))
.previewLayout(.fixed(width: 35, height: 50))
.environment(\.colorScheme, .dark)
SearchBarView(searchText: .constant(""))
.previewLayout(.fixed(width: 35, height: 50))
.environment(\.colorScheme, .light)
}
}
}
extension NSTextField {
open override var focusRingType: NSFocusRingType {
//get { .none }
get { .default }
// get { .exterior } // same as .default, could just be bug in Big Sur Dev Beta 1&2?
set { }
}
}
【问题讨论】:
-
焦点环默认绘制正确,它只是围绕 TextField 绘制,而不是围绕带有填充、背景和覆盖的自定义视图。 IE。
.textFieldStyle修饰符之后的所有内容都 not TextField 已经。您需要通过可表示使用 NSSearchField。 -
@Asperi 我明白为什么对焦环不是我想要的。我想知道如何才能做到这一点。我尝试通过 NSViewRepresentable 使用 NSSearchField,但它仍然看起来像一个常规的矩形文本字段(如我的示例),而不是在 Big Sur 上的 Finder 中看到的搜索字段。
标签: swift xcode macos swiftui macos-big-sur