2010-11-25 19 views
6

これについて複数の投稿を読みましたが、正しく動作しません。私は最新の4.2 SDKを使用しています。ナビゲーションコントローラでは、デフォルトでUITableViewの検索バーを非表示にします。

私が持っているコードは、これは部分的に動作しますが、それは少し検索バーを上に移動し、それは完全に隠されていません

self.tableView.contentOffset = CGPointMake(0.0, 44.0); 

です。私は何か大きい値44を増やしてみましたが、これは今まで何の影響もありませんでした!私はテーブルのビューコントローラのviewDidLoadメソッドでこのコードを呼び出しています。誰にもアイデアはありますか?

+0

テーブルビューをどのように配置したのか説明できますか? –

+0

私は 'wantsFullScreenLayout'をチェックアウトしたいと思います。下部にテーブルの一部を覆うバーがある場合は、フッタービューを44px高く(すばやく簡単に)追加するか、親ビューにテーブルビューをドロップすることができます。 –

答えて

14
self.tableView.contentOffset = CGPointMake(0.0, 44.0); 

上記のコードは実際には動作しますが、UITableViewがすべてのセルの作成を完了した後に実行する必要があります。私はthats別の質問だと思います。

+1

テーブルビューですべてのセルの作成が完了したことをどのように確認しましたか?あなたは私にいくつかの手がかりをくれますか?ありがとう! – Brian

24

別のアプローチは、のviewDidLoadコールに...次のようになります。また、

であれば、 "ちらつき"

-(void)scrollViewDidEndDragging:(UIScrollView *)scrollView willDecelerate:(BOOL)decelerate{ 
    CGPoint offset = self.tableView.contentOffset; 

    CGFloat barHeight = self.searchDisplayController.searchBar.frame.size.height; 
    if (offset.y <= barHeight/2.0f) { 
     self.tableView.contentInset = UIEdgeInsetsZero; 
    } else { 
     self.tableView.contentInset = UIEdgeInsetsMake(-barHeight, 0, 0, 0); 
    } 

    self.tableView.contentOffset = offset; 
} 

設定内容が一部を削除することです:

self.tableView.contentInset = UIEdgeInsetsMake(-self.searchDisplayController.searchBar.frame.size.height, 0, 0, 0); 

と実装endDraggingデリゲートメソッド検索バーを上部に貼り付け、didScrollをこの方法で実装します。

-(void)scrollViewDidScroll:(UIScrollView *)scrollView{ 
    CGRect sbFrame = self.searchDisplayController.searchBar.frame; 
    sbFrame.origin.y = self.tableView.contentOffset.y; 
    if (sbFrame.origin.y > 0) { 
     sbFrame.origin.y = 0; 
    } 
    self.searchDisplayController.searchBar.frame = sbFrame; 
} 

私は、これは

乾杯(:)を把握するために数日かかった)役立つことを願っています!

UPDATE:@carbonrが指摘したように

あなたはiOS7以降のviewDidLoadで、この行を追加する必要があります+

self.edgesForExtendedLayout = UIRectEdgeNone; 
+0

ありがとう!それはちょうど私が行方不明だった "ちらつきを取り除くために設定された内容オフセット"でした。 –

+0

@GrizzlyNetchありがとうトン!すごい解決策、私は長い間苦労していた。この解決策がしているのは、ユーザーがiPhoneの上部(アプリの外)をタップすると、テーブルビューは上にスクロールしますが、その後スクロールバーをスクロールしない限り、スクロールバーは非表示になります。 – user1046037

+1

@GrizzlyNetchスクロールされているテーブルビューがself.searchDisplayController.searchResultsTableViewまたはself.tableViewであるかどうかを確認する必要があるscrollViewDidEndDragging実装の中に疑いがあります。 – user1046037

4

あなたはviewDidLoad内部テーブルビューの初期境界を設定することができますので、検索バーがで隠されて表示されます始まり。私もあなたのような同じ問題を抱えている

- (void)viewDidLoad 
{ 
    //... 
    CGRect bounds = self.tableView.bounds; 
    bounds.origin.y = self.tableView.bounds.origin.y + searchBar.bounds.size.height; 
    self.tableView.bounds = bounds; 
    //... 
} 
-1

あなたがsearchBarプロパティを作成し、次のコードを使用する必要があります。次のコードは、私のproblem.Pleaseがあなたの中のviewDidLoad()のコードを追加します解か:

self.edgesForExtendedLayout = UIRectEdgeNone; 

N:B:私は私のプロジェクトでのautoLayoutを使用しました。

0

他にも、最新のソリューションをお探しの場合は、hereで私の答えをチェックしてください。

基本的にviewDidLayoutSubviewsが呼び出されたときにcontentOffsetを更新する必要があります。

関連する問題