swift - 更改 SwiftUI 中 NSSearchField 的高度

标签 swift swiftui

我正在使用 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)
    }
}

到目前为止,在我的 View 中使用它时效果很好: 搜索栏(搜索:$searchText)

enter image description here

我想知道是否可以更改 NSSearchField 的高度以具有类似于 Maps.app 中看到的 View : enter image description here

最佳答案

更新:如果您在 Big Sur,您还可以将 controlSize 设置为 .largehttps://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.1 Big Sur。不幸的是,对焦环不适应其高度。你可以像这样隐藏它:

    searchTextField.focusRingType = .none

...但在大多数情况下这似乎并不可取。

关于swift - 更改 SwiftUI 中 NSSearchField 的高度,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65674746/

相关文章:

ios - 大型 SwiftUI 结构导致内存错误

ios - ScrollView 内的 SwiftUI 文本,无法在两个轴上滚动

swift - @Published 数组中 ObservableObject 的更改不会更新 View

ios - Swift:使用保护语句的好处?

ios - 可以在 SwiftUI 中实现 `ScrollView` 交互式键盘关闭吗?

swift - Xcode 11 beta swift ui 预览不显示

ios - GameCenter排行榜发布后不会更新

ios - 在 Swift 上的哪里存储 API key ?

带有同步 API 下载的 Swift HUD

ios - 如何在 SwiftUI 中位于 Apple Files App 的文件夹中写入文件?