IPhone - UIView addSubview顶部的差距

时间:2009-08-31 16:50:23

标签: iphone uikit uiview

我有一个加载在MainWindow.xib中的视图。它只是一个带有uiimageview的视图,在整个屏幕上显示图像(320 X 480)。当应用程序加载时,我显示此视图,然后我执行

[self.view addSubview:tabbarController.view];

Tab Bar Controller只是一个UITabBarController,添加了2个View Controllers。当它将tabbarController的视图添加到子视图时,它会在大约20px的顶部留下一个间隙。我的应用程序确实有一个状态栏,但这基本上是另一个的空间。除非我将此添加到我的视图控制器,否则会发生这种情况:

self.view.frame = CGRectMake(0, 0, 320, 480);

任何人都可以解释这个。我在做什么

self.view = tabbarController.view;

但被告知我不应该这样做。所以现在我添加了一个子视图,但我不明白为什么我必须调整视图的CGRect才能显示20px。

1 个答案:

答案 0 :(得分:17)

UITabBarController期望将其视图添加为UIWindow的子视图,而不是其他一些UIView的子视图。 frame属性定义了视图在其superview中的偏移量,因此UITabBarController实现默认情况下将其视图的帧偏移20个像素,为状态栏留出空间。您正在以非标准方式使用UITabBarController,方法是将其添加到状态栏已偏移20像素的视图中。 UITabBarController相对于其超视图将其视图偏移了20个像素,导致您看到的差距。

解决此问题的一种简洁方法是将UITabBarController的视图添加为窗口的子视图而不是视图:

[[[UIApplication sharedApplication] keyWindow] addSubview:tabbarController.view];

(注意:如果你已经调用了makeKeyAndVisible,keyWindow方法将只返回你的窗口。否则,你可能想在你的UIViewController上设置一个窗口属性。)