2011-07-29 5 views
2

私はUIViewControllerを持っており、以下のスクリーンショットのような単純なUITabBarを配置したいと思います。私はUITabBarControllerを使いたくありません。実際、私のオリジナルのセットアップでは1つを使用しています。それを動作させるにはケーキとして簡単です。通常のUIViewController(UITabBarControllerではなく)でUITabBarを作成

しかし、UITabBarControllersをナビゲーションコントローラ内に配置するのは悪い考えであるため、階層をリファクタリングすることを余儀なくされています。

UIViewControllerを指定すると、プログラム上の下部にUITabBarをどのように追加できますか? 1つのタブバーがクリックされたときに特定のビューを表示するようにすべての設定をUITabBarDelegateで取得しましたが、ビューコントローラーが読み込まれてもタブバーが表示されない問題があります。

- (void) viewDidLoad { 
     ...some initialization... 
    CGRect frame = CGRectMake(0, 431, 320, 49); 


    profileItem = [[UITabBarItem alloc] init]; 
    profileItem.image = icon; 
    profileItem.title = @"Diet";  

    tabBar = [[UITabBar alloc] initWithFrame:frame]; 
    NSArray* items = [[NSArray alloc] initWithObjects:profileItem, nil]; 

    tabBar.items = items; 
    tabBar.delegate = self; 
    [tabBar setSelectedItem:[tabBar.items objectAtIndex:0]]; 

    [self.view addSubview:tabBar]; 
    [super viewDidLoad]; 
} 

私はここで何が欠けていますか?

enter image description here

EDIT:なんてこった、私はそれは私が上に既存のナビゲーションヘッダを持っている場合は、私が使うべきy座標..うーん...フレームに関係していますが分かりましたか?

答えて

3

編集では、フレームと関係があると判断されています。あなたの問題は、ビューのサイズがviewDidLoadであることが、最終的に表示されるときと同じであることが保証されていないという事実に起因している可能性があります。 UIKitは、表示されているコンテキストに合わせてビューのサイズを変更し、viewWillAppear:の直前に配置します。あなたはviewDidLoadでタブバーを追加したい場合は、あなたには、いくつかの数学をすることによって、あなたのビューのフレームの一番下にそれを配置する必要があり

CGRect frame = CGRectMake(0, self.view.bounds.size.height - 49, 
          self.view.bounds.size.width, 49); 

ことがで残るように続いて、適切なautoresizingMaskを設定UIKitでビューのサイズが変更されても下に表示されます。

tabBar.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth; 
関連する問題