我正在使用SwiftUI 1.0。
我为SwiftUI创建了一个搜索栏,如下所示:
import SwiftUI
struct Searchbar: NSViewRepresentable {
class Coordinator: NSObject, NSSearchFieldDelegate {
var parent: Searchbar
init(_ parent: Searchbar) {
self.parent = parent
}
func controlTextDidChange(_ notification: Notification) {
guard let searchField = notification.object as? NSSearchField else {
log.error("Unexpected control in update notification", source: .ui)
return
}
self.parent.search = searchField.stringValue
}
}
@Binding var search: String
func makeNSView(context: Context) -> NSSearchField {
let searchfield = NSSearchField(frame: .zero)
return searchfield
}
func changeSearchFieldItem(searchfield: NSSearchField, sender: AnyObject) -> NSSearchField {
//Based on the Menu item selection in the search field the placeholder string is set
(searchfield.cell as? NSSearchFieldCell)?.placeholderString = sender.title
return searchfield
}
func updateNSView(_ searchField: NSSearchField, context: Context) {
searchField.stringValue = search
searchField.delegate = context.coordinator
}
func makeCoordinator() -> Coordinator {
return Coordinator(self)
}
}到目前为止,在我的视图:Searchbar(search: $searchText)中使用它时,它运行得很好。

我想知道是否可以将NSSearchField的高度更改为具有类似于Maps.app中所看到的视图:

发布于 2021-01-19 11:55:40
更新:如果你在大苏尔,你也可以把controlSize设置为.large。https://developer.apple.com/documentation/appkit/nscontrol/controlsize/large
您可以添加一个高度约束:
func makeNSView(context: Context) -> NSSearchField {
let searchfield = NSSearchField(frame: .zero)
searchfield.translatesAutoresizingMaskIntoConstraints = false
searchfield.heightAnchor.constraint(greaterThanOrEqualToConstant: 40).isActive = true
return searchfield
}…在macOS 11.1BigSur.不幸的是,焦点环没有调整其高度。你可以这样把它藏起来
searchTextField.focusRingType = .none…但在大多数情况下,这似乎不可取。
https://stackoverflow.com/questions/65674746
复制相似问题