17

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

编辑[searchBar sizeToFit]在显示/隐藏范围栏后 调用很重要。有没有好的方法来制作动画?(我应该这样做?它似乎不起作用。)

4

2 回答 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;
}

编辑 - 斯威夫特版本 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

于 2011-05-30T06:23:31.620 回答
0

对于较新的 iOS 版本(在 11-13 测试),您不必实现任何委托方法即可。

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

您需要将其添加到viewDidLoad()

if #available(iOS 13.0, *) {
    searchController.automaticallyShowsScopeBar = true
}
于 2020-04-28T11:17:22.827 回答