【问题标题】:After updating to iOS11 my searchBar behaves strange更新到 iOS 11 后,我的搜索栏表现得很奇怪
【发布时间】:2017-09-17 07:43:06
【问题描述】:

更新到 iOS11 后,我的 searchBar 行为很奇怪。激活后,它会跳到屏幕顶部。它像以前一样正常工作,但我当然希望它保持原位。我已经尝试了很多通过谷歌搜索这种行为的解决方案,但没有任何帮助。有没有人有同样的问题?你是怎么解决这个问题的?

searchBar in place

searchBar jumped to top

var searchController: UISearchController!


        override func viewDidLoad() {
            super.viewDidLoad()
            // Setup the Search Controller
            searchController = UISearchController(searchResultsController: nil)
            searchController.searchResultsUpdater = self
            searchController.dimsBackgroundDuringPresentation = false
            searchController.hidesNavigationBarDuringPresentation = false
            searchController.searchBar.preservesSuperviewLayoutMargins = true
            searchController.obscuresBackgroundDuringPresentation = false
            searchController.searchBar.sizeToFit()
            walkaboutTableView.tableHeaderView = searchController.searchBar
            searchController.searchBar.barTintColor = matildaLightBlue
            searchController.searchBar.clipsToBounds = true
            searchController.searchBar.layer.borderWidth = 2
            searchController.searchBar.layer.borderColor = UIColor.black.cgColor
    }

【问题讨论】:

    标签: swift tableview ios11 searchbar


    【解决方案1】:

    将搜索控制器实例添加到导航项而不是表头视图有助于我解决项目中的类似问题。

    if #available(iOS 11, *) {
       navigationItem.searchController = searchController
    } else {
       tableView.tableHeaderView = searchController.searchBar
    }
    

    navigationItem.searchController

    navigationItem.hidesSearchBarWhenScrolling

    【讨论】:

    • 感谢您的回复,但仍然无法正常工作。事实上,使用这段代码时根本没有 searchBar……如果我声明“var searchController: UISearchController!”在 viewDidLoad 内部它保持原位,但是我无法从代码的其他部分访问 searchController。
    • 您能尝试在您的控制器中将 searchController 初始化为常量吗? let searchController = UISearchController(searchResultsController: nil) 另外 - 你可以下载一个很好的示例代码项目 here 来玩。
    【解决方案2】:

    Ruslan Kolosovskyi 的回答非常好。此外,如果您希望搜索栏更易于访问:

        if #available(iOS 11, *) {
           navigationItem.searchController = searchController
    
           navigationItem.hidesSearchBarWhenScrolling = false
        } else {
           tableView.tableHeaderView = searchController.searchBar
        }
    

    【讨论】:

      猜你喜欢
      • 2015-09-14
      • 2013-02-12
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2023-03-21
      相关资源
      最近更新 更多