代码之家  ›  专栏  ›  技术社区  ›  zekel lepture

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

  •  16
  • zekel lepture  · 技术社区  · 15 年前

    setShowsScopeBar: setShowsScopeBar:animated: 就像它为你做的那样 setShowsCancelButton:animated

    打电话是很重要的 [searchBar sizeToFit] 显示/隐藏范围栏后。有没有一个好的方法来动画呢(我该怎么办 this ? 它似乎不起作用。)

    1 回复  |  直到 8 年前
        1
  •  46
  •   gotnull mzelina    7 年前

    下面介绍如何使“取消”按钮和范围栏仅在编辑时显示。

    完整的代码和动画取消按钮(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;
    }
    

    编辑-版本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
  •  0
  •   heyfrank    5 年前

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

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

    viewDidLoad()

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