【问题标题】:Prevent UISearchBar from Hiding when scrolling in UITableView (Keep UISearchBar shown when scrolling) - Swift, Xcode在 UITableView 中滚动时防止 UISearchBar 隐藏(滚动时保持 UISearchBar 显示)-Swift,Xcode
【发布时间】:2021-02-14 13:32:33
【问题描述】:

我目前有一个 UISearchBar(下面的代码),它工作得很好,但是我试图让它在我的 UITableView 中滚动时,我的 UISearchBar 不会消失。我读过的一件事是使用以下代码行将 searchController 嵌入到视图控制器中:navigationItem.searchController = yourSearchController 然后为了防止 UISearchBar 隐藏,添加这行代码:navigationItem.hidesSearchBarWhenScrolling = false 但是它没有工作.我还读过将 SearchBar 放在 View Hierarchy 中的 UITableView 上方,但是当我这样做并将其放在导航栏下方时,滚动时它会与 tableView 单元格重叠。我需要 SearchController,如果需要,我该如何实现?我花了好几个小时在类似的 StackOverflow 线程中搜索多年前提出的相同问题,并尝试实现响应,但是,没有一个响应有效。任何回复将不胜感激,谢谢!

UISearchBar IBOutlet:

@IBOutlet weak var searchBar: UISearchBar!

viewDidLoad 函数:

filteredData = data

UISearch条码:

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
   if searchText.isEmpty {
      filteredData = data
   } else {
      filteredData = data.filter{$0.title.range(of: searchText, options: .caseInsensitive) != nil }
   }
   self.tableView.reloadData()
}
}

查看层次结构:

查看控制器布局:

【问题讨论】:

    标签: ios swift xcode uitableview uisearchbar


    【解决方案1】:

    如果你创建一个 UISearchController 作为变量会怎样:

    let searchController = UISearchController(searchResultsController: nil)
    

    然后在 viewDidLoad 上

    navigationItem.titleView = searchController.searchBar 
    

    这里的区别是你的seachBar嵌入在navigationItem的标题上,所以它不会在滚动时消失。这显示了您正在寻找的行为。

    【讨论】:

    • 您好,感谢您的回复。这样做是什么,它在导航栏上方的屏幕顶部创建了一个搜索栏。但是,当您在其中搜索时,屏幕会变黑。有没有办法将 UISearchController 嵌入到我现有的 searchBar 中?
    • 你必须遵守 UISearchResultsUpdating 协议,并实现 updateSearchResults(for searchController: UISearchController)。不要忘记在 viewDidLoad 上执行 searchController.searchResultsUpdater = self self.definesPresentationContext = true
    猜你喜欢
    • 2013-02-05
    • 2014-07-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多