UISearchController/UISearchBar 在 macOS 下的行为与 iOS 不同

rma*_*ddy 7 uisearchbar ios uisearchcontroller mac-catalyst

我有一个带有标准 UISearchBar 的标准 UISearchController。搜索栏显示在导航栏中。在 iOS/iPadOS 上一切正常。但是搜索栏在 macOS 下的行为有所不同。

在 iOS 下,当您点击搜索栏时,该图标仅在搜索栏中出现文本时才会出现。没有文字时不显示。如果您点击该图标,则会删除搜索栏中的文本。到目前为止一切都很好。

但是在 macOS 下,无论搜索栏是否有文字,图标都会立即出现并保持可见。更糟糕的是,当您单击该图标时,不仅会从搜索栏中删除文本,还会取消整个搜索控制器。就像单击了取消按钮一样。实际上,该UISearchBarDelegate方法searchBarCancelButtonClicked是在单击图标时调用的(但在 iOS 中不会)。

作为参考,这里是viewDidLoad演示问题的简单视图控制器的方法中的相关代码:

navigationItem.rightBarButtonItem = editButtonItem

let results = UITableViewController(style: .plain)

let sc = UISearchController(searchResultsController: results)
sc.delegate = self
sc.obscuresBackgroundDuringPresentation = true
sc.automaticallyShowsCancelButton = true
sc.hidesNavigationBarDuringPresentation = true // Setting to false causes other problems unrelated to this question

sc.searchBar.delegate = self

navigationItem.searchController = sc
Run Code Online (Sandbox Code Playgroud)

在真正的 macOS 应用程序(例如标准邮件应用程序)上,搜索栏的行为与UISearchBariOS 上的一样,而不是UISearchBarmacOS 上的。

这是 Mac Catalyst 中的错误,还是我遗漏了某些属性或委托,可以让 UISearchBar 及其图标在 macOS 下像在 iOS 下一样工作?