2

カスタム タブ ビュー コントローラー (UITabBarDelegate を介して実装) とその中のナビゲーション コントローラーをサブビューとして使用しています。ナビゲーション コントローラーのナビゲーション バーが親のタブ ビュー コントローラーのナビゲーション バーの下に表示されるようにするために、画面の上部から 44 ピクセルの位置から開始する CGRect を作成して、NavigationController をプログラムで初期化します。

これは、1 つの小さいながらも非常に目立つバグを除いて、美しく機能します。親の Tab View Controller が最初に表示されてから一瞬の間、NavigationController のナビゲーション バーは本来あるべき場所の約 30 ピクセル下から始まり、44 ピクセルの正しい高さ (正確には親タブ バー コントローラーのナビゲーション バーが終了します)。以下の前後のスクリーンショットは、私が話していることを示しています。

Bad Navigation Bar は、その汚れた初期設定の洗濯物を公開して、すべての人に見せます!

NavigationController のサブビューの初期化および/またはビューの挿入をどこに移動して、Navigation Bar のこの小さな調整をエンド ユーザーから隠す必要がありますか?

現在、NavigationController の初期化は、次のように Tab Bar Controller の init メソッドで行われるようにしています。

- (id)initWithCoder:(NSCoder *)aDecoder{
    self = [super initWithCoder:aDecoder];
    if (self) {
        self.tab1vc =[[ContactsListViewController alloc] initWithNibName:@"ContactsViewController" bundle:nil];
        self.nav1 = [[UINavigationController alloc] initWithRootViewController:self.tab1vc];
        [nav1.view setFrame:CGRectMake(0, 44, 320, 370)];
        }
    }
    return self;
}

次に、次のように、NavigationController の実際のビューをメイン タブ バー コントローラーの "ViewDidLoad" メソッドに挿入します。

- (void)viewDidLoad
{
    [super viewDidLoad];
    [self.view insertSubview:nav1.view belowSubview:mainTabBar];
    [mainTabBar setSelectedItem:driverListTabBarItem];

}
4

1 に答える 1

1
     self.nav1 = [[UINavigationController alloc] initWithRootViewController:self.tab1vc];
     [nav1.view setFrame:CGRectMake(0, 44, 320, 370)];

あなたの「self.tab1vc」initメソッドでは、そのrootViewControllerにframe.originを設定する必要があります

    self.view.frame = CGRectMake(0.0f,0.0f,320,460);

これがあなたを助けることを願っています。

于 2012-10-08T04:07:43.847 に答える