1

サブビューコントローラーを保持するカスタム UIViewController を作成しています。これらは、次のようにメイン ビュー コントローラー内に配置されます。

- (void) setHeaderViewController:(UIViewController *)vc
{
    [self setViewController:vc isHeader:YES];
    _headerViewController = vc;
}

- (void) setDetailViewController:(UIViewController *)vc
{
    [self setViewController:vc isHeader:NO];
    _detailViewController = vc;
}

- (void) setViewController:(UIViewController*) viewController isHeader:(BOOL)isHeader
{
    UIViewController* viewControllerRef = ((isHeader) ? _headerViewController : _detailViewController);
     
    if(viewControllerRef == viewController)
         return;
     
    const CGSize selfSize = self.view.frame.size;
    
    CGRect viewFrame;
    
    if (isHeader)
    {
        viewFrame = CGRectMake(0, 0, selfSize.width, 150);
    }
    else
    {
        viewFrame = CGRectMake(0, 150, selfSize.width, selfSize.height-150);
    }

    UIView* viewControllerView = viewController.view;
    
    [viewControllerView setFrame:viewFrame];
    [viewControllerView setAutoresizingMask:(UIViewAutoresizingFlexibleWidth | UIViewAutoresizingFlexibleHeight | ((isHeader) ? UIViewAutoresizingFlexibleBottomMargin : UIViewAutoresizingFlexibleTopMargin))];
    
    [self.view addSubview:viewControllerView];
}

各サブ ビュー コントローラー スロット内に 2 つの UIViewControllers を配置すると、メソッドで定義されたサイズが尊重されます。ただし、UITabBarController を配置すると、貪欲になり、スペース全体を占有します。

UIViewController *vc = [[WIFCustomerDetailHeaderViewController alloc] initWithNibName:@"WIFCustomerDetailHeaderViewController" bundle:nil];
[self setHeaderViewController:vc];

UIViewController *vc1 = [[UIViewController alloc] init];
vc1.title = @"Personal Data";
vc1.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Personal Data" image:nil tag:0];
vc1.view.backgroundColor = [UIColor redColor];
vc1.view.frame = CGRectMake(0,400,100,100);

UIViewController *vc2 = [[UIViewController alloc] init];
vc2.title = @"Diagnosis";
vc2.tabBarItem = [[UITabBarItem alloc] initWithTitle:@"Diagnosis" image:nil tag:0];
vc2.view.backgroundColor = [UIColor purpleColor];
vc2.view.frame = CGRectMake(0,500,50,50);

NSArray *tabs = [[NSArray alloc] initWithObjects:vc1, vc2, nil];

WIFCustomerDetailTabViewController *tvc = [[WIFCustomerDetailTabViewController alloc] init];
[tvc setViewControllers:tabs];

[self setDetailViewController:tvc];

ここで何が起こっているのか知っている人はいますか?原因がわかりません…

以下の画像..

2 つのサブ ビュー コントローラー ここに画像の説明を入力

4

1 に答える 1

2

UITabBarController クラスのドキュメントには、「このビューをウィンドウのルートとしてインストールする必要があります。他のビュー コントローラーとは異なり、タブ バー インターフェイスは別のビュー コントローラーの子としてインストールしないでください」と記載されています

特にサポートされていない設計を試みているようです。

于 2012-10-26T12:13:02.857 に答える