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

时间:2010-06-16 23:56:25

标签: iphone animation uisearchbar uisearchbardelegate

我想在表格为空时(在第一次编辑搜索栏之前)没有显示范围栏,在编辑时没有范围栏,最后在编辑完成时显示。我知道UISearchBarDelegate协议,但我不知道如何用动画显示/隐藏范围栏。我知道UISearchBar有setShowsScopeBar:,但setShowsScopeBar:animated:没有setShowsCancelButton:animated

修改 显示/隐藏范围栏后调用[searchBar sizeToFit]非常重要。有没有一个很好的方法来动画这个? (我应该this吗?它似乎不起作用。)

2 个答案:

答案 0 :(得分:44)

以下是如何使取消按钮和范围栏仅在编辑时显示。

使用取消按钮(dis)外观设置动画的小额奖励完成代码:

- (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

答案 1 :(得分:0)

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

在iOS 13中,默认行为是始终显示范围栏,即使未激活搜索也是如此。启用搜索功能后,以前的iOS版本会自动显示和隐藏范围栏。

您需要在viewDidLoad()

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