【问题标题】:Swift - How to hide or reposition an active UISearchController?Swift - 如何隐藏或重新定位活动的 UISearchController?
【发布时间】:2022-11-01 11:01:23
【问题描述】:

我有一个 UITableViewController,它使用 FireStore 数据库中的数据加载单元格。该表有一个 SearchController 和一个 SearchBar,它始终处于活动状态。这是因为用户可以通过使用在 SearchBar 中添加字符串的按钮将过滤器应用于 UITableViewController。

一切都很好,但问题是由于 SearchController 始终处于活动状态,它覆盖了导航栏,即“过滤器”按钮所在的位置。由于我不需要用户自己在搜索栏中输入内容(这是通过过滤器按钮完成的),所以我想将搜索控制器隐藏在某个地方,同时保持它处于活动状态。

这是代码的样子:

override func viewDidLoad()
    {
        super.viewDidLoad()
        
        tableView.register(EncontradoCell.self, forCellReuseIdentifier: cellId)
        
        searchController.delegate = self
        searchController.searchBar.delegate = self
        
        initSearchController()
        
        loadData()
        
        
        
        self.navigationItem.rightBarButtonItem = UIBarButtonItem(title: "Filtrar", style: .done, target: self, action: #selector (showFilters))

    }
    
    override func viewDidAppear(_ animated: Bool) {
        super.viewDidAppear(animated)
        
        searchController.isActive = true
        
    }
    let searchController = UISearchController()
    let searchBar = UISearchBar()

    func initSearchController() {
        
        searchController.loadViewIfNeeded()
        searchController.searchResultsUpdater = self
        navigationItem.searchController = searchController
       
        searchController.definesPresentationContext = true
        searchController.obscuresBackgroundDuringPresentation = false
        searchController.searchBar.enablesReturnKeyAutomatically = false
        searchController.searchBar.returnKeyType = UIReturnKeyType.done
        navigationItem.hidesSearchBarWhenScrolling = false

        searchController.searchBar.becomeFirstResponder()

    }

这是 searchcontroller 不活动时的样子:

当 SearchController 处于活动状态时,过滤器按钮会被覆盖:

你能告诉我一种方法来隐藏 SearchController,或者将它重新定位到它不可见的地方,同时保持它处于活动状态吗?也许在底部而不是顶部。

非常感谢

我阅读了有关向 searchController 添加约束或将搜索栏移动到子视图的信息,但由于我是 Swift 新手,我发现这很难实现。

【问题讨论】:

    标签: swift xcode uitableview uisearchbar uisearchcontroller


    【解决方案1】:

    您可以使用UINavigationItem 的preferredSearchBarPlacement 属性。听起来您想要.stacked 值。默认情况下,您将获得 .inline 设置。

    navigationItem.searchController = searchController
    navigationItem.preferredSearchBarPlacement = .stacked
    

    这将显示搜索栏以及导航栏的其他内容,而不是隐藏大部分导航栏。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-06
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多