如何使用动画隐藏/显示UISearchBar的范围栏?

17
我希望在表格为空时(在搜索栏首次编辑之前),不显示范围条,当正在编辑时也不显示范围条,在编辑完成后再显示范围条。我知道UISearchBarDelegate协议,但我不知道如何使用动画显示/隐藏范围条。我知道UISearchBar有setShowsScopeBar:,但没有像setShowsCancelButton:animated那样的setShowsScopeBar:animated:编辑很重要的一点是,在显示/隐藏范围条后调用[searchBar sizeToFit]。有一个好的方法来实现动画吗?(我应该做this吗?它似乎不起作用。)

想知道同样的事情,这有点不一致。 - Tristan Warner-Smith
2个回答

46

以下是仅在编辑时显示取消按钮和范围栏的方法。

完整代码,并额外提供了取消按钮(消失/出现)动画的小彩蛋:

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar {
    searchBar.showsScopeBar = YES;
    [searchBar sizeToFit];
    [searchBar setShowsCancelButton:YES animated:YES];

    return YES;
}

- (BOOL)searchBarShouldEndEditing:(UISearchBar *)searchBar {
    searchBar.showsScopeBar = NO;
    [searchBar sizeToFit];
    [searchBar setShowsCancelButton:NO animated:YES];

    return YES;
}

编辑 - Swift版本 3

public func searchBarShouldBeginEditing(_ searchBar: UISearchBar) -> Bool {
    searchBar.showsScopeBar = true
    searchBar.sizeToFit()
    searchBar.setShowsCancelButton(true, animated: true)

    return true
}

public func searchBarShouldEndEditing(_ searchBar: UISearchBar) -> Bool {
    searchBar.showsScopeBar = false
    searchBar.sizeToFit()
    searchBar.setShowsCancelButton(false, animated: true)

    return true
}

来源:http://www.alexandre-gomes.com/?p=418


2
代码可以运行,但是它将范围栏显示在与搜索栏相同的行上。有没有一种动态显示范围栏,但在搜索字段下方的方法? - andrei
你有没有找到解决这个问题的方法,@andrei? - el-flor

0

对于较新的iOS版本(已在11-13上测试),您无需实现任何委托方法即可使其正常工作。

iOS 13的默认行为是始终显示范围栏,即使搜索未激活。以前的iOS版本会在搜索激活时自动显示和隐藏范围栏。

您需要在viewDidLoad()中添加此内容。

if #available(iOS 13.0, *) {
    searchController.automaticallyShowsScopeBar = true
}

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