搜索控制器在导航项中混淆行为

问题描述 投票:0回答:2

所以我的navigationItem上有一个searchcontroller。

// 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执行正常但搜索控制器没有显示。但是,如果我推动视图控制器并返回,它会显示出来。

两个操作之间的主要区别是什么? (推/弹和现在/解雇)

ios swift ios11 uisearchcontroller
2个回答
1
投票

它应该是:

navigationController.navigationItem.searchController = searchController

代替:

navigationItem.searchController = searchController

后者只会在下次导航控制器刷新/加载/任何适当的术语时生效?


0
投票

当您呈现其他视图控制器时,您将呈现一个新的viewController层次结构,我的意思是,您在上一个导航控制器之外。如果从导航控制器中推送新控制器,则将其添加到堆栈中,并显示导航栏。

© www.soinside.com 2019 - 2024. All rights reserved.