导航项中的搜索控制器令人困惑的行为
Posted
技术标签:
【中文标题】导航项中的搜索控制器令人困惑的行为【英文标题】:Search Controller in Navigation Item confusing behaviour 【发布时间】:2017-10-11 09:45:02 【问题描述】:所以我的导航项上有一个搜索控制器。
// View controller
var searchController = UISearchController(searchResultsController: nil)
override func viewWillAppear(_ animated: Bool)
tableView.reloadData()
if #available(ios 11.0, *)
navigationController?.navigationBar.prefersLargeTitles = true
if employeeSearchList.count > 10
if #available(iOS 11.0, *)
navigationItem.searchController = searchController
else
tableView.tableHeaderView = searchController.searchBar
else
if #available(iOS 11.0, *)
let search = UISearchController(searchResultsController: nil)
navigationItem.searchController = search
navigationItem.searchController = nil
else
tableView.tableHeaderView = nil
UIView.animate(withDuration: 0.50, animations:
self.view.layoutIfNeeded()
)
这段代码运行完美。如果计数小于 10,则设置搜索控制器,否则设置为空的搜索控制器,然后设置为 nil
,使其从 UI 中消失。
func viewDidLoad()
.
.
.
searchController.searchResultsUpdater = self
searchController.dimsBackgroundDuringPresentation = false
searchController.searchBar.tintColor = tintColor
// Table view editing delegate -> delete operation
if employeeSearchList.count < 10
if #available(iOS 11.0, *)
let search = UISearchController(searchResultsController: nil)
navigationItem.searchController = search
navigationItem.searchController = nil
else
tableView.tableHeaderView = nil
UIView.animate(withDuration: 0.50, animations:
tableView.reloadData()
self.view.layoutIfNeeded()
)
.
.
.
现在我的问题是,当我在此视图控制器上方显示一个视图控制器然后将其关闭时,viewWillAppear
执行良好,但搜索控制器不显示。但是如果我推动视图控制器并返回,它就会显示出来。
这两种操作的主要区别是什么? (推/弹出和呈现/关闭)
【问题讨论】:
【参考方案1】:应该是:
navigationController.navigationItem.searchController = searchController
代替:
navigationItem.searchController = searchController
后者只会在下次navigationController被刷新/加载/无论合适的术语是什么时生效?
【讨论】:
我遇到了类似的问题。这个解决方案对我不起作用,也许还有别的?我对链接的问题***.com/questions/64348408/…【参考方案2】:当你呈现一个视图控制器表单时,你正在呈现一个新的视图控制器层次结构,我的意思是,你在之前的导航控制器之外。如果您从导航控制器推送新控制器,则将其添加到堆栈中,并且将显示导航栏。
【讨论】:
我希望得到类似的东西 - 在每种情况下都会调用什么额外的函数、委托等。以上是关于导航项中的搜索控制器令人困惑的行为的主要内容,如果未能解决你的问题,请参考以下文章