セクション インデックスがテキスト フィールドと重ならないように、テーブル ヘッダー内にあるときに UISearchBar の幅を変更するにはどうすればよいですか? 電話アプリの連絡先ビューにあるのと同じレイアウトを再作成したいと考えています。
3 に答える
考えられる解決策の 1 つは、カスタム ビューを tableHeaderView に追加することです。これは私がしたことです:
searchBar は、ヘッダー ファイルで宣言した UISearchBar です。UIView を作成し、幅全体に UINavigationBar を追加し、その上に短い UISearchBar を追加しました。最後に、UIView を tableHeaderView に割り当てました。
searchBar = [[UISearchBar alloc] initWithFrame:CGRectMake(0.0, 0.0, 290.0, 44.0)];
UIView *customTableHeaderView = [[UIView alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)];
UINavigationBar *dummyNavigationBar = [[UINavigationBar alloc] initWithFrame:CGRectMake(0.0, 0.0, 320.0, 44.0)];
[customTableHeaderView addSubview:dummyNavigationBar];
[customTableHeaderView addSubview:searchBar];
[dummyNavigationBar release];
self.tableView.tableHeaderView = customTableHeaderView;
[customTableHeaderView release];
より洗練されたソリューションは、contentStretch プロパティを使用して UISearchBar を拡大することです。私はまだそれを試して、それが機能するかどうかを確認する必要があります.
このスクリーンショットに見られるように、検索バーの右端に「A」と「B」が表示されているように、画面の右側にあるインデックス文字の A ~ Z が検索バーにオーバーランしているということですか?
(a) このアルファベットオーバーランの問題を回避する方法が見つかりません。Scott McCammon の回答 here でリンクされているアプローチは、Apple によって禁止されています (それでも、この問題を解決できるかどうかはわかりません)。
(b) iPod touch (第 4 世代) の iOS 6.0.1の Apple の連絡先アプリでこの動作が見られます。
(c) 検索バーはテーブル ビューのヘッダーにあるため、論理的にはバグではなく機能だと思います。ヘッダーはテーブル ビューの一部であり、テーブル ビューの一部のようにスクロールするため、テーブル ビューの残りの部分と同じようにインデックス アルファベットを描画することはおそらく理にかなっています。
スコープ ボタンがある場合、この問題はさらに問題になります。右側にはスコープ ボタン用のスペースが確保されていないため、インデックス アルファベットは一番右のボタンのすぐ上に描画されます。
UISearchDisplayController を使用すると、この回答に記載されているように、目的の動作が自動的に機能します。