我有一个加载在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。
答案 0 :(得分:17)
UITabBarController期望将其视图添加为UIWindow的子视图,而不是其他一些UIView的子视图。 frame属性定义了视图在其superview中的偏移量,因此UITabBarController实现默认情况下将其视图的帧偏移20个像素,为状态栏留出空间。您正在以非标准方式使用UITabBarController,方法是将其添加到状态栏已偏移20像素的视图中。 UITabBarController相对于其超视图将其视图偏移了20个像素,导致您看到的差距。
解决此问题的一种简洁方法是将UITabBarController的视图添加为窗口的子视图而不是视图:
[[[UIApplication sharedApplication] keyWindow] addSubview:tabbarController.view];
(注意:如果你已经调用了makeKeyAndVisible,keyWindow方法将只返回你的窗口。否则,你可能想在你的UIViewController上设置一个窗口属性。)