8

我有一个标准的 UISearchController 和一个标准的 UISearchBar。搜索栏显示在导航栏中。在 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

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

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

4

0 回答 0