当搜索栏处于活动状态时,快速表视图被锁定

Posted

技术标签:

【中文标题】当搜索栏处于活动状态时,快速表视图被锁定【英文标题】:swift table view is locked when searchbar active 【发布时间】:2019-12-29 21:58:59 【问题描述】:

我正在使用一个包含搜索控制器的大型导航栏。如果我不搜索,我可以毫无问题地滚动浏览我的 tableview,但是如果我正在搜索它就像它被锁定一样接缝。这是我的代码:

func updateSearchResults(for searchController: UISearchController) 

    // First we will check if input is only containing numbers => search for PLZ otherwise we will check if a restaurant is called like this otherwise search if there is a suitable city
    self.navigationItem.title = searchController.searchBar.text!

if !searchController.isActive
        //TODO get all restaurants for default city
    self.navigationItem.title = "München"

    


func tableView(_ tableView: UITableView, numberOfRowsInSection section: Int) -> Int 
    return 10


func tableView(_ tableView: UITableView, cellForRowAt indexPath: IndexPath) -> UITableViewCell 
    let cell = tableView.dequeueReusableCell(withIdentifier: "partnerscell", for: indexPath) as! PartnersCellTableViewCell

    return cell

func tableView(_ tableView: UITableView, heightForRowAt indexPath: IndexPath) -> CGFloat 
    var bounds = UIScreen.main.bounds
    var width = bounds.size.width
    var height = bounds.size.height
    return height/2.2


@IBOutlet weak var tv: UITableView!
let searchController = UISearchController(searchResultsController: nil)
override func viewDidLoad() 
    super.viewDidLoad()
            searchController.searchResultsUpdater = self
 if #available(ios 11.0, *) 
             self.navigationController?.navigationBar.prefersLargeTitles = true
    

    self.navigationController?.navigationBar.isTranslucent = true

    self.navigationItem.searchController = searchController
    self.navigationController?.navigationBar.shadowImage = UIImage()

另外,如果我在搜索我的工具栏看起来更暗。附上两张截图:

【问题讨论】:

为什么你的tv 没有被分配delegatedataSource 【参考方案1】:

您无法访问表格视图,因为UISearchController 配置错误导致其上方有一个不可见层。 这样修改searchController

let searchController = UISearchController(searchResultsController: nil)
searchController.obscuresBackgroundDuringPresentation = false
searchController.definesPresentationContext = true

【讨论】:

【参考方案2】:

当您的搜索处于活动状态时,您无法访问 tableview,因为UISearchController obscuresBackgroundDuringPresentation 的属性默认为 true,这表明当搜索处于活动状态时,控制器的底层内容会被隐藏。所以你可以设置如下:

override func viewDidLoad() 
    super.viewDidLoad()
            searchController.searchResultsUpdater = self
 if #available(iOS 11.0, *) 
             self.navigationController?.navigationBar.prefersLargeTitles = true
    

    self.navigationController?.navigationBar.isTranslucent = true

    self.navigationItem.searchController = searchController
    self.navigationController?.navigationBar.shadowImage = UIImage()
    searchController.obscuresBackgroundDuringPresentation = false
    searchController.definesPresentationContext = true

【讨论】:

以上是关于当搜索栏处于活动状态时,快速表视图被锁定的主要内容,如果未能解决你的问题,请参考以下文章

使用搜索栏时无法使表格视图处于非活动状态。苹果手机

切换回搜索栏处于活动状态时,选项卡栏视图变为空白

搜索控制器处于活动状态时出现表格视图时隐藏的第一行

在搜索栏处于活动状态时删除表格视图中的单元格 - CoreData 错误

UISearchBar 在活动时与 UITableView 内容重叠

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