初始状态:
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。
关于ios - 如何正确隐藏范围按钮,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52701156/