0

私はこの質問が以前に何度か尋ねられたことを知っています、そしてそれは解決されました(私がiOS4と5でその解決策を使う前に)。私の最近のプロジェクトではUISearchBar、他のいくつかのビューで使用する必要があり、アクティブになったときにスコープボタンを表示したいと思います。以前、私はやっていUISearchBardelegate- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar

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

スコープボタンが表示されていました。しかし今、iOS6ではこのコードは何もしません。UISearchBarIBに追加され、そのデリゲートがビューコントローラに設定されます。誰かがこの問題の解決策を持っていますか?前もって感謝します。

4

4 に答える 4

7

UISearchBarスコープ バーを表示および非表示にするときに、固有のコンテンツ サイズを無効にできないことが原因のようです。

UIKit で修正されるまではUISearchBar、単一のメソッドをサブクラス化してオーバーライドするだけで、非常に簡単に回避できます。

- (void)setShowsScopeBar:(BOOL)showsScopeBar {
  if ([self showsScopeBar] != showsScopeBar) {
    [self invalidateIntrinsicContentSize];
  }
  [super setShowsScopeBar:showsScopeBar];
}
于 2012-12-21T22:23:25.260 に答える
2

これをバグとしてAppleに報告し、修正方法の回答を得ました:

UISearchBar をサブクラス化し、-setShowsScopeBar をオーバーライドするだけです。

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

更新: これは iOS 7 で修正されています。

于 2012-12-18T19:15:24.213 に答える
1

わかりました、問題は iOS 6 の自動レイアウトの問題でした。いったん削除すると、問題はなくなりました。みんな、ありがとう :)

于 2012-10-22T12:30:29.280 に答える
0

UISearchBar をサブクラス化せずに iOS 6.0 でこれを行う別の方法は、検索バーのデリゲートでフレーム サイズを調整することです。

- (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;
}
于 2013-02-16T20:10:48.847 に答える