首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >跳转到屏幕顶部的iOS 11搜索栏

跳转到屏幕顶部的iOS 11搜索栏
EN

Stack Overflow用户
提问于 2017-08-21 21:54:36
回答 5查看 6.5K关注 0票数 13

我有一个UITableView,在其中我将它的标题设置为搜索栏。

代码语言:javascript
运行
复制
tableView.tableHeaderView = searchController.searchBar

一切都按照计划工作,直到你点击它,它似乎脱离了tableView,并跳到屏幕顶部。tableView行保持不变。为什么它会在iOS 11而不是iOS 10中这样做呢?

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2017-09-28 12:10:31

我们鼓励在iOS 11上应用新的方式来显示搜索栏/搜索控制器。以下是我所做的工作:

代码语言:javascript
运行
复制
    if #available(iOS 11.0, *) {
        navigationItem.searchController = searchController
    } else {
        tableView.tableHeaderView = searchController.searchBar
    }
票数 15
EN

Stack Overflow用户

发布于 2017-09-21 16:46:04

我在SO上的第一篇文章,我希望我这样做是对的。

我遇到了完全相同的问题,真的很难找到解决方案。但现在我已经设法通过将UISearchController子类化来修复它。

这个子类有两个属性:

代码语言:javascript
运行
复制
var customDelegate : CustomSearchControllerDelegate!
var searchBarWithCustomSize : UISearchBar!

因此,我现在可以不使用UISearchController的searchBar,而是使用来自我的自定义searchController的新属性searchBarWithCustomSize,如下所示:

代码语言:javascript
运行
复制
tableView.tableHeaderView = customSearchController.searchBarWithCustomSize

这使得搜索栏在处于活动状态时行为正确。您还可以使用此searchBarWithCustomSize拥有更多自由,例如,如果需要,您可以更改其框架,依此类推。

在我的实现中,我需要委托知道搜索栏文本字段何时被更改,但我猜委托的使用取决于您的情况。

票数 4
EN

Stack Overflow用户

发布于 2017-10-09 05:31:07

我遇到了完全相同的问题--在iOS11上UISearchBar的奇怪跳跃行为,而在iOS10上一切正常。

关于上面西蒙·王的建议-我遇到的问题是我没有在UIViewController中定义我的UISearchBar,而是在另一个UITableViewCell中-因此我无法访问navigationItem,也不能以这种方式显示我的搜索栏。

无论如何,在经过多次尝试和错误之后,我能让事情正常工作的唯一方法就是完全清除UISearchController和相关的委托。

相反,我定义了一个UISearchBar内部接口生成器,并适当地定义了它的布局约束。然后,我让它的父类符合UISearchBarDelegate并执行searchBar.delegate = self

然后,我添加了一组委托方法来捕获搜索栏中的内容更改,并相应地更新我的表格结果:

代码语言:javascript
运行
复制
func searchBarTextDidBeginEditing(_ searchBar: UISearchBar) {  
   filterContentForSearchText(self.searchBar.text!)
}

func searchBarTextDidEndEditing(_ searchBar: UISearchBar) {
   filterContentForSearchText(self.searchBar.text!)
   self.searchBar.resignFirstResponder()
}

func searchBar(_ searchBar: UISearchBar, textDidChange searchText: String) {
   filterContentForSearchText(self.searchBar.text!)
}

生活又变得美好了。希望这能有所帮助!

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/45798923

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档