0

UITabBar のデリゲートとして機能する DashBoardViewController という UIViewController があります。そのxibに、3つのUITabBarItemを持つUITabBarを配置しました。

これらの各項目は、異なるビュー コントローラーをアクティブにします。それらを ViewController1、ViewController2、ViewController3 と呼びましょう。

DashBoardViewController は ViewController1 を表示し、読み込み時に最初のバーを選択することになっているため、initWithNibName には次のようなものがあります。

...
ViewController1* vc = [[ViewController1 alloc] initWithNibName:@"ViewController1" bundle:nil];
[self.view addSubview:vc.view]; 
self.currentViewController = vc;
...

次のような UITabBarDelegate を実装します。

if (item == viewController1Item) {
    ViewController2 *vc2 = [self.childrenControllers objectAtIndex:1];


    [self.currentViewController.view removeFromSuperview];
    [self.view addSubview:vc2.view];
    self.currentViewController = vc2;


} ...

問題 最初の UITabBarItem のビュー コントローラーは常に期待どおりに動作し、ビューのフル サイズに拡張されます。ただし、2 番目以降のタブでは、これは発生しません。ビューは拡張されません。これは、たとえば、ViewController2 XIB でタブを下部に揃えるかどうかを示しています。これは、UITabBarItem 内で表示すると下部に表示されません。

これは XIB とは関係ないことに注意してください。ViewController1 と ViewController2 を逆にすると、拡張に失敗した ViewController1 になります。UITabBarItem に関連しています。

アイデア おそらく、これは、DashBoardViewController の initWithNibName を呼び出すときに Subview を追加する方法によって異なります。しかし、これを説明する方法が見つかりません。

その他の詳細 すべての XIB は「Size = none」で設定されています。

4

2 に答える 2

1

XIB のセットアップ方法を実際に見ずに語ることはできませんが、いくつかの提案をすることができます。

サブビューを削除して DashBoardViewController に追加することによって実装しようとしている動作は、実際にはUITabBarControllerによって処理される必要があります。これにより、コンテンツのビューである UITabBar が提供され、UIViewController 間の切り替えロジックを処理しながら、レイアウトを正常に保ち、SDK の一部になります。

何らかの理由で UITabBarController を使用できない、または使用したくない場合は、次viewWillLayoutSubviewsのように DashBoardViewController にメソッドを実装することをお勧めします。

- (void)viewWillLayoutSubviews
{
    if( self.currentViewController )
    {
        self.currentViewController.view.frame = self.view.bounds;
    }
}

self.currentViewController.view.frame = self.view.bounds;ViewControllers も交換した後に行を追加してみてください。これにより、現在の ViewController のビューのフレームが常に DashBoardViewController のビューの境界を埋めるようにサイズ設定されます。

これは「適切な」方法ではありませんが、可能であれば UITabBarController を使用することを強くお勧めします。専用コントローラー。

それ以上の問題は、DashBoardViewController のビューでのサイズ/位置ではなく、サブ ViewController の内部レイアウトに関係している可能性が最も高いでしょう。

于 2013-01-23T21:59:01.080 に答える
0

XIBファイルで、柔軟な高さを上下に固定するように設定していることを確認してください。これにより、UITableViewは常に4インチディスプレイと同じ高さになります。

ここに画像の説明を入力してください

于 2013-01-22T17:08:54.740 に答える