ios - 如何正确隐藏范围按钮
问题描述
初始状态:
sb.showsScopeBar 设置为 false
searchBarShouldBeginEditing 使范围按钮在搜索栏被激活时出现:
func searchBarShouldBeginEditing(_ sb: UISearchBar) -> Bool {
sb.setShowsCancelButton(true, animated: true)
sb.scopeButtonTitles = scopeButtonTitles
}
点击取消按钮,正确隐藏范围按钮,我们回到原始状态。
注意这是默认行为,我们的 searchBarCancelButtonClicked 除了在必要时恢复之前的查询文本之外没有做任何事情。
现在是恼人的位...
如果我把
sb.setShowsCancelButton(false, animated: true)
在 searchBarShouldEndEditing 或 searchBarTextDidEndEditing 中,取消按钮消失但范围按钮只是缩小:
添加sb.scopeButtonTitles = nil
会使范围按钮消失,但搜索栏不会调整大小:
调用 sb.sizeToFit() 似乎根本没有帮助......使用 sb.showsScopeBar 完全破坏了搜索栏 UI。
解决方案
找到了解决方案!
模拟按下取消按钮的行为(隐藏范围按钮并调整搜索栏的大小):
func searchBarTextDidEndEditing(_ sb: UISearchBar) {
sb.setShowsCancelButton(false, animated: true)
searchController?.isActive = false
}
我们不需要将 sb.scopeButtonTitles 设置为 nil。
推荐阅读
- spring - Spring Boot/Tomcat,“由于缺少 ServletWebServerFactory bean,无法启动 ServletWebServerApplicationContext”
- php - MYSQL数据库连接使用php报错
- doctrine-orm - 多对多自引用搜索
- ios - ARKit 和文件处理
- kubernetes - Kubernetes中的metalLB vs nodeport
- javascript - 解析后修改 JavaScript 值
- reactjs - 函数不会在 React 中渲染元素
- java - 片段寻呼适配器仅显示创建的最后一个片段
- windows - 在 kiosk 模式下使用 windows 一段时间后出现空白白屏
- extjs - ExtJS:validitychange - 从有效性检查中排除隐藏的输入字段