如何正确隐藏范围按钮

时间:2018-10-08 11:20:56

标签: ios swift uisearchbar ios12

初始状态:

Initial state

sb.showsScopeBar设置为false

searchBarShouldBeginEditing使范围按钮在激活搜索栏时出现:

func searchBarShouldBeginEditing(_ sb: UISearchBar) -> Bool {
        sb.setShowsCancelButton(true, animated: true)
        sb.scopeButtonTitles = scopeButtonTitles
}

enter image description here

点击取消按钮,正确隐藏示波器按钮,我们回到了原始状态。

这是默认行为,并且我们的searchBarCancelButtonClicked除了在必要时恢复先前的查询文本外没有做任何事情。

Initial state

现在到了烦人的地方...

如果我放

sb.setShowsCancelButton(false, animated: true)

在searchBarShouldEndEditing或searchBarTextDidEndEditing中,取消按钮消失了,但作用域按钮只是缩小了:

enter image description here

添加sb.scopeButtonTitles = nil会使范围按钮消失,但搜索栏不会调整大小:

enter image description here

调用sb.sizeToFit()似乎根本没有帮助...使用sb.showsScopeBar会完全破坏搜索栏的用户界面。

1 个答案:

答案 0 :(得分:0)

找到了解决方案!

要模拟按下取消按钮的行为(隐藏范围按钮并调整搜索栏的大小):

func searchBarTextDidEndEditing(_ sb: UISearchBar) {
    sb.setShowsCancelButton(false, animated: true)
    searchController?.isActive = false
}

我们不需要将sb.scopeButtonTitles设置为nil。