我有一个已加载到 MainWindow.xib 中的 View 。它只是一个带有 uiimageview 的 View ,在整个屏幕(320 X 480)上显示图像。当应用程序加载时,我显示此 View ,然后执行
[self.view addSubview:tabbarController.view];
标签栏 Controller 只是一个 UITabBarController,其中添加了 2 个 View Controller 。当它将 tabbarController 的 View 添加到 subview 时,它会在顶部留下约 20px 的间隙。我的应用程序确实有一个状态栏,但这基本上是另一个状态栏的空间。除非我将其添加到我的 View Controller 中,否则会发生这种情况:
self.view.frame = CGRectMake(0, 0, 320, 480);
谁能解释一下这个。我在做
self.view = tabbarController.view;
但被告知我不应该这样做。所以现在我添加了一个 subview ,但我不明白为什么我必须调整 View 的 CGRect 以不显示 20px。
最佳答案
UITabBarController 希望将其 View 添加为 UIWindow 的 subview ,而不是其他 UIView 的 subview 。 Frame 属性定义 View 在其父 View 中的偏移量,因此 UITabBarController 实现默认将其 View 的框架偏移 20 像素,以便为状态栏留出空间。您以非标准方式使用 UITabBarController,将其添加到状态栏已偏移 20 像素的 View 中。 UITabBarController 相对于其 super View 将其 View 额外偏移 20 个像素,从而导致您看到的间隙。
解决此问题的一种简洁方法是将 UITabBarController 的 View 添加为窗口的 subview 而不是 View :
[[[UIApplication sharedApplication] keyWindow] addSubview:tabbarController.view];
(注意:如果您已经调用了 makeKeyAndVisible,keyWindow 方法只会返回您的窗口。否则,您可能需要在 UIViewController 上设置窗口属性。)
关于iPhone - UIView addSubview 顶部间隙,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1358288/