2

私は私のUISearchBar中に平野を持っています:titleViewUINavigationBar

検索バー

ユーザーが検索を開始すると、[キャンセル] ボタンが表示されます。

- (BOOL)searchBarShouldBeginEditing:(UISearchBar *)searchBar
{
    [searchBar setShowsCancelButton:YES animated:YES];
    return YES;
}

次のようになります。

キャンセルボタン

ここで、外観をカスタマイズして、別の [キャンセル] ボタンを使用したいと思います。

id appearance = [UIBarButtonItem appearanceWhenContainedIn:[UISearchBar class], nil];
[appearance setTitle:@""];
[appearance setBackgroundImage:[UIImage imageNamed:@"cancel.png"] forState:UIControlStateNormal barMetrics:UIBarMetricsDefault];
[appearance setBackgroundImage:[UIImage imageNamed:@"cancel_pressed.png"] forState:UIControlStateSelected barMetrics:UIBarMetricsDefault];

結果は次のようになります。

カスタマイズされた外観

カスタムの [キャンセル] ボタンの幅は約 60 ピクセルですが、なぜか 80 ピクセル以上に引き伸ばされます。のドキュメントにsetBackgroundImage:forState:barMetrics:は、「良い結果を得るには、backgroundImage を伸縮可能な画像にする必要がある」と記載されていますが、[キャンセル] ボタンが画面の多くの領域を占有するのはもったいないように感じます (特に、左側のバー項目も追加したいため)。

サブビューを反復することでこれを回避できますが、外観プロキシ アプローチを使用することをお勧めします。問題は、外観をカスタマイズすると、[キャンセル] ボタンの幅がこれほど広くなる理由です。

4

0 に答える 0