UISearchBar范围按钮不会显示iOS 6

时间:2012-10-22 10:06:14

标签: iphone objective-c ios ios6

我知道之前曾多次询问过这个问题,并且已经解决了(在我使用iOS4和5的解决方案之前)。我最近的项目涉及将UISearchBar与其他一些视图一起使用,并且我希望在它变为活动状态时显示它的范围按钮。之前,在UISearchBardelegate - (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar我正在做的事情

[searchBar setShowsScopeBar:YES];
[searchBar sizeToFit];

它显示了范围按钮。但现在,在iOS6上,这段代码什么也没做。在IB中添加了UISearchBar,它的委托被设置为我的视图控制器。 有人解决这个问题吗?提前谢谢。

4 个答案:

答案 0 :(得分:7)

看起来发生的事情是UISearchBar在显示和隐藏范围栏时无法使其内在内容大小无效。

在UIKit修复之前,通过简单地对UISearchBar进行子类化并覆盖单个方法,可以非常轻松地解决它:

- (void)setShowsScopeBar:(BOOL)showsScopeBar {
  if ([self showsScopeBar] != showsScopeBar) {
    [self invalidateIntrinsicContentSize];
  }
  [super setShowsScopeBar:showsScopeBar];
}

答案 1 :(得分:2)

我向Apple报告这是一个错误,并得到了如何修复它的答案:

只是将UISearchBar子类化并覆盖-setShowsScopeBar:

- (void)setShowsScopeBar:(BOOL)showsScopeBar
{
    if (self.showsScopeBar != !!showsScopeBar) [self invalidateIntrinsicContentSize];
    [super setShowsScopeBar:showsScopeBar];
}

更新:这已在iOS 7中修复。

答案 2 :(得分:1)

好吧,问题出在iOS 6自动布局的事情上,一旦我把它删除,问题就消失了。谢谢大家:)

答案 3 :(得分:0)

另一种在iOS 6.0中执行此操作而无需子类化UISearchBar的方法只是调整搜索栏代表中的帧大小:

- (void)searchBarTextDidBeginEditing:(UISearchBar *)searchBar
{
    NSMutableArray *ma = [NSMutableArray arrayWithCapacity:2];

    [ma addObject:@"One"];
    [ma addObject:@"Two"];

    CGRect f = searchBar.frame;
    f.size.height += 44.0f;
    searchBar.frame = f;

    searchBar.scopeButtonTitles = [ma copy];
    searchBar.showsScopeBar = YES;
}

- (void)searchBarTextDidEndEditing:(UISearchBar *)searchBar
{
    CGRect f = searchBar.frame;
    f.size.height -= 44.0f;
    _searchBar.frame = f;

    searchBar.scopeButtonTitles = nil;
    searchBar.showsScopeBar = NO;
}