2013-03-01 93 views
0

我以編程方式創建UITabBar。這裏是代碼,更新屏幕旋轉的UITabBar寬度

UITabBarItem *item1 = [[UITabBarItem alloc] initWithTitle:@"Item 1" image:[UIImage imageNamed:@"dashboard"] tag:1]; 
UITabBarItem *item2 = [[UITabBarItem alloc] initWithTitle:@"Item 2" image:[UIImage imageNamed:@"documents"] tag:2]; 
UITabBarItem *item3 = [[UITabBarItem alloc] initWithTitle:@"Item 3" image:[UIImage imageNamed:@"mail"] tag:3]; 
UITabBarItem *item4 = [[UITabBarItem alloc] initWithTitle:@"Item 4" image:[UIImage imageNamed:@"packages"] tag:4]; 

NSArray *tabbaritems = [[NSArray alloc] initWithObjects:item1, item2, item3, item4, nil]; 

CGRect bounds = [[UIScreen mainScreen] bounds]; 
UITabBar *tbbar = [[UITabBar alloc] initWithFrame:CGRectMake(0, 411, bounds.size.width, 49)]; 
[tbbar setItems:tabbaritems]; 
[self.view addSubview:tbbar]; 

- (BOOL)shouldAutorotate 
{ 
    return YES; 
} 

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) { 
     //update UITabBar width 
    } 
    else { 
     //update UITabBar width 
    } 
} 

我有2個問題。正如你所看到的,我已經將CGFloat y值硬編碼爲411.在肖像模式下,這在3.5英寸的屏幕中看起來很好。但是,你可以想象的問題是,如果我在4英寸的設備上運行它,標籤欄會出現在屏幕的底部。如果我旋轉設備(儘管屏幕大小),在橫向模式下,標籤欄會下降,因此它完全不會出現在屏幕上。

  1. 我怎樣才能設置UITabBar的位置動態所以不管它在哪個轉速運行 屏幕,它總是出現固定在 屏幕下方?

另一個問題是寬度。當我第一次創建UITabBar實例時,我已經使用這條線設置了它,bounds.size.width

  1. 如何在屏幕旋轉上更新它,使其擴展爲填充屏幕的整個寬度 ?

回答

1

使用兩個變量來表示y偏移和寬度。使用標誌交換縱向和橫向上的y偏移和寬度。旋轉後重新加載視圖。

並從viewDidLoad的superview中刪除舊的tbbar。

... 
CGRect bounds = [[UIScreen mainScreen] bounds]; 
CGFloat tabbarAnchor = bounds.size.height; 
CGFloat tabbarWidth = bounds.size.width; 
if (_flag == 1) { 
    tabbarWidth = bounds.size.height; 
    tabbarAnchor = bounds.size.width; 
} 
UITabBar *tbbar = [[UITabBar alloc] initWithFrame:CGRectMake(0, tabbarAnchor-69, tabbarWidth, 49)]; 
[tbbar setItems:tabbaritems]; 
[self.view addSubview:tbbar]; 
... 

- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration 
{ 
    if (toInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || toInterfaceOrientation == UIInterfaceOrientationLandscapeRight) { 
     //update UITabBar width 
     _flag = 1; 
     [self viewDidLoad]; 
    } 
    else { 
     //update UITabBar width 
     _flag = 0; 
     [self viewDidLoad]; 
    } 
} 

而且還建議您使用已經實現了旋轉的UITabBarController。

+0

嗨!非常感謝回覆。當方向改變時,它在定位TabBar方面效果很好。不過,我遇到了一個小問題。比方說,我將設備旋轉到橫向模式。 TabBar的位置很好。然後,當我將其旋轉回縱向視圖時,之前在橫向模式下創建的TabBar仍然顯示爲[this](http://i.imgur.com/NHdwY4u.png)。我怎樣才能擺脫它?再次感謝。 :) – Isuru 2013-03-04 04:00:18

+0

我有種不得不使用'UITabBar'而不是'UITabBarController',因爲我正在實現一個自定義的'UITabBar'。 – Isuru 2013-03-04 04:01:37

+0

由於每次執行旋轉時,新的子視圖都會添加到self.view,您需要在添加新的tbbar之前清除以前添加的tbbar。代碼可能是這樣的:'for(UIView * view in self.view.subviews){ [view removeFromSuperview]; }' – 2013-03-04 13:57:21