2011-11-03 9 views
7

検索バーをクリックすると、ぼやけた黒を過度にサイズ変更する方法を知っている人は誰ですか?サイズを変更するUISearchDisplayController淡色のオーバーレイをぼかす

私がクリックしたときに問題が発生すると、テーブルビューが消えて消えてしまいます。

私は結果テーブルビューのサイズを変更するためにこれを使用しています。

-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView { 
    tableView.frame =fTableView.frame;//CGRectMake(26, 100, 280, 310); //fTableView.frame; 
    tableView.backgroundColor = [UIColor colorWithRed:243.0/255.0 green:236.0/255.0 blue:212.0/255.0 alpha:1]; 
} 

検索バーでクリックすると、定義されたサイズの代わりにグレーのオーバーレイがいっぱいになります。

enter image description here

enter image description here

キャンセルボタンをクリックしたときに、ビューが戻って消費されます。 enter image description here

+1

にUISearchDisplayControllerからXIB /ストーリーボードの検索ディスプレイコントローラを変更トムからこの答えをスウィフトは私の問題を解決しました:http://stackoverflow.com/a/4128659/675486 –

答えて

1

私はsearchDisplayControllerが別のテーブルビューを所有していると思っていたので、そのサイズを変更する必要があります。線に沿って

何か:<yourSearchViewController>.view.frame =self.tableView.frame;

か、引数として受け取り方法、例えばでは、クラス変数としてそれを持っていない場合:

-(void)searchDisplayController:(UISearchDisplayController *)controller didShowSearchResultsTableView:(UITableView *)tableView { 
    controller.view.frame = self.tableView.frame; 
    tableView.backgroundColor = [UIColor colorWithRed:243.0/255.0 green:236.0/255.0 blue:212.0/255.0 alpha:1]; 
} 

Alternativilyあなたがしたい場合がありますそれをサブクラス化し、ビューのプロパティをローカルにオーバーライドします。

希望すると便利です。

+0

何もありません'UISearchDisplayController'の' view'が好きです。あなたの解決策は誤りです。 – thesummersign

+0

それはあなたが探しているものとしての目安でした。コントローラーのプロパティを調べるのに数分を費やすと、 'searchResultsTableView'の名前の下に特定のビューがあることに気付くでしょう。 source:http://developer.apple.com/library/ios/#documentation/uikit/reference/UISearchDisplayController_Class/Reference/Reference.html – Wolfert

+0

私はコントローラの '.h'ファイルを見て、' UIView * _view'を見つけましたがそれは公開されていないようです。 – thesummersign

0

UISearchDisplayControllerは独自のテーブルビューを所有していますが、これは簡単ではありません。 私はこのようなことに出くわし、より良い解決策を探しています。

-(void)searchDisplayControllerWillBeginSearch:(UISearchDisplayController *)controller 
{ 
    [controller.searchResultsTableView setDelegate:self]; 
    CGFloat gr = 12.0; 
    controller.searchResultsTableView.backgroundColor = [UIColor colorWithRed:gr green:gr blue:gr alpha:0.0]; 
    [controller.searchResultsTableView setSeparatorStyle:UITableViewCellSelectionStyleNone]; 
    CGRect searchTableFrame = CGRectMake(7, 105, 305, 292); 
    [controller.searchResultsTableView setFrame:searchTableFrame]; 
} 

上記のコードは透明にセットにバックグラウンドを行いますが、静かにフレームサイズを無視しているようです。

編集:SOLVED これには堅牢な解決策が見つかりました。here。 これは私の人生を救った。

+0

また、必要な幅で適切にフィットするかのように見た目をモックするカスタムセルを使用しました。 – thesummersign

10

ぼかしたオーバーレイフレームを移動するために、いくつかの回答を組み合わせました。

1:

@interface MySearchController : UISearchDisplayController 

2 UISearchDisplayControllerクラスをオーバーライドします。

- (void)setActive:(BOOL)visible animated:(BOOL)animated 
{ 
[super setActive: visible animated: animated]; 

//move the dimming part down 
for (UIView *subview in self.searchContentsController.view.subviews) { 
    //NSLog(@"%@", NSStringFromClass([subview class])); 
    if ([subview isKindOfClass:NSClassFromString(@"UISearchDisplayControllerContainerView")]) 
    { 
     CGRect frame = subview.frame; 
     frame.origin.y += 10; 
     subview.frame = frame; 
    } 
} 

} 

3のsetActive関数をオーバーライド:MySearchController

+0

niiiice。 – MrTristan

+0

幅を変更するために使用します。ありがとうございました!!! – AlexanderZ

+0

これはこの問題の最適な解決策です。ありがとう! –

関連する問題