iPhone - UIView addSubview 顶部间隙

标签 iphone uikit uiview

我有一个已加载到 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/

相关文章:

ios - 如何解决 Apple Match-O 链接器错误?

iphone - 带有BOOL变量的init方法的 cocoa 风格指南?

IOS 应用商店拒绝 : App name includes text which is not relevant

ios - Slide Over 和 Split View 未启用

javascript - HTML 5 视频播放无法在 iPhone(Chrome 和 Safari)上运行

iphone - 根据预先计算的 ascender 计算 UIFont 大小

iphone - 将当前 View 替换为任何现有的新 View

iphone - 在 UITableView 中执行 commitEditingStyle 时如何制作 'delete-button' 的自定义 View

ios - 自动布局约束以改变方向的组成

ios - UIPopoverController presentPopoverFromBarButtonItem :. .. 偏心