2

UITabBarController を含む UINavigationController のルート ビューがあります。タブ バー コントローラーには 2 つの単純なビューがあります。iOS 6 シミュレーターまたはデバイスで最初に起動すると、最初のビューの上にギャップが表示されます。2 番目のタブに切り替えて戻ると、ギャップが消えます。これは iOS 6 以降に発生し始めました。iOS 5 は問題なく動作します。何が変わったのですか?

スクリーンショット:

スクリーンショット

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

    UITabBarController *tabBarController = [[UITabBarController alloc] init];
    UIView *dummyView1 = [[UIView alloc] init];
    [dummyView1 setBackgroundColor:[UIColor redColor]];
    UIViewController *dummyViewController1 = [[UIViewController alloc] init];
    [dummyViewController1 setView:dummyView1];

    UIView *dummyView2 = [[UIView alloc] init];
    [dummyView2 setBackgroundColor:[UIColor blueColor]];
    UIViewController *dummyViewController2 = [[UIViewController alloc] init];
    [dummyViewController2 setView:dummyView2];

    NSArray *viewControllers = [NSArray arrayWithObjects:dummyViewController1, dummyViewController2, nil];

    [tabBarController setViewControllers:viewControllers];

    UINavigationController *rootNavController = [[UINavigationController alloc] initWithRootViewController:tabBarController];
    [[self window] setRootViewController:rootNavController];

    self.window.backgroundColor = [UIColor whiteColor];
    [self.window makeKeyAndVisible];
    return YES;
}
4

4 に答える 4

2

Apple は、アプリケーション プログラミング ガイド (またはおそらく ViewController ガイド) で、tabBarController をナビゲーション コントローラーに配置してはならないことを明示的に伝えています。順序を逆にする必要があります。コントローラーの配列を切り替え、1 つのセットで tabBar を非表示にすることにより、tabBarController でトリックを実行できます。しかし、現在の順序を使用しようとすると、ある時点で失敗する運命にあります.たとえば、iOS5.1で動作するようになり、6、6.1、または7で壊れるのを確認できます.

于 2012-09-24T21:33:32.713 に答える
1

いいえ、順序を逆にする必要はありません。Apple は理由を説明する必要があります。私は彼らのドキュメントをすべて調べましたが、これを行う正当な理由が見つかりません。

この構成の非常に合理的な使用法を考えることができます。スポーツ リーグのチームなど、エンティティのグループに関する情報をカテゴリ別に表示するアプリを作成したいとします。ナビゲーション コントローラーをエンベロープ コントローラーとして使用し、タブ バーを使用して、チームや選手の統計などのさまざまな種類の統計をチームごとに表示できます。なぜこのようなことを他の方法で行うのでしょうか? それは完全に論理的です。もちろん、Apple の神々をなだめる以外にも。

于 2012-11-13T17:04:26.387 に答える
0

なぜ彼らがそれを許可しないのか、なぜ「ギャップ」が発生するのかはわかりませんが、私はそれを回避する方法を見つけました:

tabController.SelectedIndex=1;
tabController.SelectedIndex=0;

タブをナビゲーションコントローラーに押し込んだ後。

于 2013-05-27T14:49:58.990 に答える