我有一个加载到 MainWindow.xib 中的视图。它只是一个带有 uiimageview 的视图,在整个屏幕(320 X 480)上显示图像。当应用程序加载时,我显示此视图,然后执行
[self.view addSubview:tabbarController.view];
选项卡栏控制器只是一个 UITabBarController,添加了 2 个视图控制器。当它将 tabbarController 的视图添加到子视图时,它会在顶部留下约 20px 的间隙。我的应用程序确实有一个状态栏,但这基本上是另一个状态栏的空间。除非我将其添加到我的视图控制器中,否则会发生这种情况:
self.view.frame = CGRectMake(0, 0, 320, 480);
谁能解释一下这一点。我在做
self.view = tabbarController.view;
但被告知我不应该这样做。所以现在我添加了一个子视图,但我不明白为什么我必须调整视图的 CGRect 以不显示 20px。
UITabBarController 希望将其视图添加为 UIWindow 的子视图,而不是其他 UIView 的子视图。 Frame 属性定义视图在其父视图中的偏移量,因此 UITabBarController 实现默认将其视图的框架偏移 20 像素,以便为状态栏留出空间。您以非标准方式使用 UITabBarController,将其添加到状态栏已偏移 20 像素的视图中。 UITabBarController 相对于其超级视图将其视图额外偏移 20 个像素,从而导致您看到的间隙。
解决此问题的一种干净方法是将 UITabBarController 的视图添加为窗口的子视图而不是视图:
[[[UIApplication sharedApplication] keyWindow] addSubview:tabbarController.view];
(注意:如果您已经调用了 makeKeyAndVisible,则 keyWindow 方法只会返回您的窗口。否则,您可能需要在 UIViewController 上设置窗口属性。)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)