2011-07-29 62 views
2

我有一個UIViewController,我希望在下面的截圖中放置一個簡單的UITabBar:我不想使用UITabBarController。事實上,我的原始設置使用了一個,並且它很容易作爲蛋糕來使用它。使用普通的UIViewController創建UITabBar(不是UITabBarController)

但是,事情是我發現把UITabBarControllers放在導航控制器中是一個壞主意,所以我不得不重構層次結構(所以請不要使用它)。

鑑於UIViewController,我怎樣才能在底部編程添加UITabBar?當我單擊一個標籤欄時,我得到了我的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

編輯:哎呀,我發現它與框架做...嗯..如果我在上面的現有導航標題我應該用什麼y座標?

回答

3

您在編輯中提到您已經確定它與框架有關。您的問題可能源於以下事實:您的視圖在viewDidLoad中的大小不能保證相同,最終顯示時它的大小也會相同。 UIKit調整視圖以適應viewWillAppear:之前顯示的上下文。

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

然後設置適當的autoresizingMask使之保持在:

如果您要添加的標籤欄在viewDidLoad,那麼你應該在你的視圖的框架的底部,通過做一些數學它定位底部即使UIKit調整您的視圖:

tabBar.autoresizingMask = UIViewAutoresizingFlexibleTopMargin | UIViewAutoresizingFlexibleWidth; 
相關問題