0

マスター ディテール テンプレートの修正版を使用するアプリを開発中です。アプリはドキュメント ベースであるため、すべてのドキュメントを一覧表示するテーブル ビューで統計します。ドキュメントが選択されると、3 つのタブを持つタブ バーにスライドが表示されます。最初の 2 つのタブはテーブル ビューです。両方のテーブル ビューには、共通のカスタム スーパークラスを共有する独自のテーブル ビュー コントローラー クラスがあります。継承はUITableViewController-> TMSTableViewController->TMSExpensesTableViewController/TMSCategoriesTableViewController. どちらのタブが最初に表示されても、ナビゲーション バーの下にテーブルが表示されます。ただし、ロードする 2 番目のタブは常にナビゲーション バーの下の画面上部から開始されるため、最初の行と半分が非表示になります。それがテーブル ビューの 1 つにすぎない場合は、コントローラーまたはビューに何か問題があると思いますが、実際には最初のタブのシーンを複製し、両方が同じコントローラーを実行していても、2 番目のタブはまだ一番上から開始されました。画面の。

iOS7 でバグを見つけましたか、それともタブ バーで複数のテーブル ビューを使用するときに行う必要がある奇妙なトリックはありますか?

各テーブルは、単一の Core Data エンティティ タイプを表示TMSTableViewControllerし、フェッチされた結果コントローラーを処理するためのすべての共通コードと、ほとんどのテーブル ビュー コードも備えています。2 つのサブクラスの唯一のメソッドは、表示されるエンティティの種類に基づいてセルを適切に構成し、フェッチされた結果コントローラを適切なエンティティに設定し、必要に応じて適切な種類のエンティティを追加することです。

4

1 に答える 1

0

これは、iOS 7 のバグの結果のようです。回避策は、最初のテーブル ビュー以外のすべてで次のコードを使用することです。

CGRect barFrame = self.navigationController.navigationBar.frame;
    CGRect tabFrame = self.tabBarController.tabBar.frame;
    self.tableView.contentInset = UIEdgeInsetsMake((barFrame.origin.y + barFrame.size.height), 0, tabFrame.size.height, 0);

このコードを でラップして使用している#ifdefため、修正されたときに関連するコードを簡単に削除し#defineて、すべてのコードを削除できます。

于 2014-01-21T22:22:48.683 に答える