我的UISearchBar会向上移动(带动画),我想要禁用这个功能。

9

我想在我的tableView上实现一个UISearchBar

我的代码(在viewDidLoad中):

self.searchController = UISearchController(searchResultsController: nil)
self.searchController.searchResultsUpdater = self
self.searchController.delegate = self
self.searchController.searchBar.delegate = self
self.searchController.searchBar.autocapitalizationType = .None
self.searchController.searchBar.autocorrectionType = .No

self.searchController.hidesNavigationBarDuringPresentation = false
self.searchController.dimsBackgroundDuringPresentation = false

self.tableView.tableHeaderView = self.searchController.searchBar

当我点击搜索栏时,这个搜索栏会移动到顶部,就像它想要隐藏导航栏一样。如下图所示: When the searchbar is waiting When I click in the searchbar 我在许多文章中寻找答案,但没有任何作用。我想禁用此动画,以便搜索栏不会移动。

尝试使用 self.edgesForExtendedLayout = UIRectEdgeNone; - karthik
谢谢您的回答。我尝试了 self.edgesForExtendedLayout = .Noneself.searchController.edgesForExtendedLayout = .None。结果是一样的。 - Robin
这将对您有所帮助:https://dev59.com/5Ybca4cB1Zd3GeqPUVIC - karthik
3个回答

34

您可以通过以下设置来防止此问题:

self.searchController.hidesNavigationBarDuringPresentation = false

1
我认为是这样的。我这么做了,但那改变了什么吗? - Robin

6
您可以将 UISearchController 视为在开始搜索时以模态方式呈现。如果您有一个常规的 UINavigationController 设置,这样做就没问题了。但是,在像您这样更加“定制化”的 UI 中,可能会出现搜索控制器附加到错误视图等问题。

我建议您不要在这种情况下使用 UISearchController ,而是使用一个单独的 UISearchBar 初始化您的界面(可能在 storyboard 中),然后手动执行搜索。实现 UISearchBarDelegate 并为搜索结果添加自己的 UITableView,如果您不能简单地在原位过滤内容。

虽然看起来您有一个 tableView 变量 - 您可以简单地添加另一个属性,类似于您用作 UITableViewDataSource 的属性,并在那里存储 filtered 数据。因此,每当您在 UISearchBar 中输入任何内容时,只需在重新加载表格视图数据时使用 filtered 数据源。例如:

var data: [String]
var filteredData: [String]

接着在 UITableViewDataSource 中使用 filteredData

func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
    return filteredData.count
}

...

然后在 UISearchBarDelegate 中做类似以下这样的事情:

func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
    // Filter the data you have. For instance:
    filteredData = data.filter({$0.rangeOfString(searchText).location != NSNotFound})
    tableView.reloadData()
}

1
我做了一些更改。我只使用了一个 searchBar 而没有使用它的控制器。效果完美!谢谢 - Robin

2
在你的presenting controller的viewDidLoad方法中添加以下代码: self.extendedLayoutIncludesOpaqueBars = true

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接