1

UISearchBarアクティブになったときに拡張しようとしています。

私が抱えている問題は、ユーザーが少なくとも2文字のテキストを入力した後にのみ、検索バーが展開されることです。それまでは固定されています。そこにを追加するsearchBar.alpha =0.7;と機能するので、ユーザーが検索バーに触れるとすぐにこのメソッドが呼び出されるようです

- (void)searchDisplayControllerDidBeginSearch : (UISearchDisplayController *)controller
{
    [UIView animateWithDuration:0.2 animations:^{
        self.searchBar.frame = CGRectMake(0,10,250,self.searchBar.frame.size.height);
        // self.searchBar.frame = CGRectMake(70, 10, 250, 40);
        searchBar.alpha =0.7;
        [searchBar layoutSubviews];            
    }];    
}

私が設定した方法が問題かどうかはわかりません。これが私が持っているものです:

.h

@property (weak, nonatomic) IBOutlet UISearchBar *searchBar;

.m

@synthesize searchBar;

StoryBoard:で

ここに画像の説明を入力してください

助けてくれてありがとう。

4

2 に答える 2

1

UISearchBar ( ) のクラス デリゲートを作成し、メソッドの実装UISearchBarDelegateにアニメーション コードを貼り付けてみてください。- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar私はそれが助けるべきだと思います。

于 2013-02-03T21:25:28.797 に答える
1

UISearchBar のサイズと位置をアニメーション化する際に同様の問題がありましたが、その問題は iOS 6 の自動レイアウトに関連していることが判明しました。私のコードのアニメーション ブロックは、(void)searchBarTextDidBeginEditing から呼び出すことを除いて、あなたのものとまったく同じです: (UISearchBar *)searchBar.

検索バーのサブクラスでsearchBar.frameオーバーライドされていたログを見つけました。layoutSubviewsこの Q&A では、iOS 6 で「layoutSubviews」の動作がどのように異なるかを説明しています (単一ビューの自動レイアウトをオプトアウトしますか? )

それに基づいて、iOS 6 用にビルドしている場合、UISearchBar フレームをアニメーション化するオプションは、自動レイアウトを無効にするか、プログラムで UISearchBar をインスタンス化するかのいずれかのようです。私は後者を選択しましたが、うまくいきました。

PS: 自動レイアウトを無効にする場合は、ストーリーボード全体または .xib のみを無効にすることができます (詳細はこちら: iOS 5 との下位互換性を維持しながら iOS 6 で自動レイアウトを有効にする)

お役に立てれば。

于 2013-02-03T23:52:24.807 に答える