2010-06-24 74 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 

依靠标签栏的实际高度,并使用幻数作为后备。