2010-06-24 82 views
35

我在編寫一個應用程序,它使用UITabBar作爲導航的一部分。我還使用UIScrollView來呈現比屏幕可以處理的更多信息。因此,我需要設置滾動視圖來考慮UITabBar的高度,以便顯示所有信息。計算UITabBar的高度

有沒有辦法計算UITabBarheight

回答

57

是320×49

如果你想測試,開放的界面生成器,添加中的UITabBar一樣,進入的統治者,你會看到它

UITabBar is inherited from UIVIew這樣你就可以使用frame.size.height獲得高度

+9

是否保證始終保持這種狀態?我寧願使用API​​來獲取該值,而不願意使用IB並在應用程序中插入幻數。 – 2010-06-24 03:16:25

+0

UITabBar繼承自UIView,因此您可以嘗試使用UIView的frame.size.height – vodkhang 2010-06-24 03:18:25

+0

當我從工作中回來時,會給我一個鏡頭。你知道我是否可以在不創建對象的實例的情況下獲得該信息?此外,創建一個虛擬實例或將應用程序委託中的正在使用的UITabBar傳遞給我正在使用的視圖以便它具有更準確的值會更好嗎? – 2010-06-24 03:22:47

7

我正在尋找做一些類似的事情,在ViewController視圖的VISIBLE部分居中標籤。這個ViewController屬於一個UITabBarController。

下面是我用於中心我標籤的代碼:我用[[自視圖]界限]不[[自視圖]幀],因爲後者包括20像素頂欄作爲

UILabel *roomLabel = [[UILabel alloc] init]; 
CGRect frame = [[self view] bounds]; 
float tabBarHeight = [[[super tabBarController] tabBar] frame].size.height; 
frame.size.height -= tabBarHeight; 
[roomLabel setFrame:frame]; 
[[self view] addSubview:roomLabel]; 
[roomLabel release]; 

通知Y偏移(拋出垂直居中)。

希望這可以幫助別人!順便說一下:我使用iOS 4.3和XCode 4,TabBar高度的「硬代碼」值仍然是49!

3

我知道這並不理想,但我真的不想在任何地方都有一個奇數。我所做的就是創建一個一次性的UITabBarController,並從那裏獲得高度。

我這樣做也是因爲[UITabBar initWithFrame:]按照需要工作,但是做[bar setFrame:]沒有。我需要創作時的框架纔是正確的。

UITabBarController *dtbc = [[[UITabBarController alloc] init] autorelease]; 

CGRect tabRect = [[[self navigationController] view] frame]; 
tabRect.origin.y = tabRect.size.height - [[dtbc tabBar] frame].size.height; 
tabRect.size.height = [[dtbc tabBar] frame].size.height; 

tabBar_ = [[UITabBar alloc] initWithFrame:tabRect]; 

我喜歡的是,它會正確地將標籤欄放在父級的底部,而不管父母的大小。

39

如果視圖控制器的祖先是選項卡欄控制器,則可以從該選項卡欄中檢索高度。

CGFloat tabBarHeight = self.tabBarController.tabBar.frame.size.height; 
2

這應該在大多數情況下對UIViewController中的任何實例:

bottomLayoutGuide.length 
3

斯威夫特3+

let tabBarHeight = tabBarController?.tabBar.frame.size.height 
print(tabBarHeight ?? "not defined") 

應該打印49.0(類型CGFloat的)

0

在斯威夫特:

let height = self.tabBarController?.tabBar.frame.height ?? 49.0 

依靠標籤欄的實際高度,並使用幻數作爲後備。