搜索处于活动状态并推送到下一个视图控制器时导航栏出现问题

时间:2018-07-18 12:54:46

标签: ios swift uinavigationbar uisearchcontroller

我遇到导航栏问题。我要在NavigationItem的搜索控制器中添加searchController

查看以下链接上的图像: navigation bar issue

步骤:

1)我在表格视图中有数据,当我单击单元格时,它是带有自定义导航视图的打开的详细信息屏幕。一切正常。 (默认导航栏被隐藏)

2)现在,我单击了搜索栏,然后单击了表格视图单元格。它向我显示了默认导航栏的“详细信息”屏幕。我不想显示默认的导航栏。

我为实现搜索控制器而编写的代码如下:

searchController = UISearchController(searchResultsController: nil)
searchController.searchResultsUpdater = self
searchController.obscuresBackgroundDuringPresentation = false
searchController.searchBar.placeholder = "Search here..."

searchController.searchBar.tintColor = .white
searchController.searchBar.barTintColor = .white

if let textfield = searchController.searchBar.value(forKey: "searchField") as? UITextField {

    textfield.textColor = UIColor.blue

    if let backgroundview = textfield.subviews.first {

        // Background color
        backgroundview.backgroundColor = UIColor.white

        // Rounded corner
        backgroundview.layer.cornerRadius = 10;
        backgroundview.clipsToBounds = true;
    }
}

self.navigationItem.searchController = self.searchController

definesPresentationContext = true

以下是隐藏didSelect方法内导航栏的代码:

self.navigationController?.navigationBar.isHidden = true
self.navigationController?.isNavigationBarHidden = true

4 个答案:

答案 0 :(得分:1)

您可以通过使搜索控制器处于不活动状态来解决此问题,然后在延迟一段时间后导航至详细信息视图控制器。

尝试使用Requests.HOME_FEED.requestCode方法中的以下代码,该方法将在搜索控制器处于活动状态时帮助您隐藏导航栏。

didSelect

您必须要求延迟才能导航,否则会在控制台中向您发出有关导航控制器演示过程的警告。

因此,此代码首先使搜索控制器处于非活动状态,然后导航到下一个视图控制器。

我希望这对您有帮助。

答案 1 :(得分:0)

如果您想随时隐藏默认的navBar,则可以在详细信息viewController中实现它:

override func viewWillAppear(_ animated: Bool) {
    super.viewWillAppear(animated)

    navigationController?.isNavigationBarHidden = true
    // or like so
    navigationController?.setNavigationBarHidden(true, animated: false)
}

答案 2 :(得分:0)

我有同样的问题。尽管我在viewWillAppear()中隐藏了导航栏,但是当搜索控制器在上一个视图中处于活动状态时,似乎可以使导航栏可见。

我通过在viewWillLayoutSubviews()中再次隐藏导航栏来解决它:

kontakt.jpg

答案 3 :(得分:0)

如果任何人都遇到相同的问题,请尝试此解决方案。

它为我工作。我希望它也对您有用。

Objective-C

-(void)viewWillDisappear:(BOOL)animated{
    if (@available(iOS 13.0, *)) {
        [self.navigationController.view setNeedsLayout]; 
        [self.navigationController.view layoutIfNeeded];
    }
}

快速

func viewWillDisappear(_ animated: Bool) {
    if (@available(iOS 13.0, *)) {
         self.navigationController?.view.setNeedsLayout()     
         self.navigationController?.view.layoutIfNeeded()
    }
}