【问题标题】:IPhone - UIView addSubview Gap at topiPhone - UIView addSubview Gap 在顶部
【发布时间】:2009-08-31 16:50:23
【问题描述】:

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

[self.view addSubview:tabbarController.view];

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

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

谁能解释一下。我在做

self.view = tabbarController.view;

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

【问题讨论】:

    标签: iphone uikit uiview


    【解决方案1】:

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

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

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

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

    【讨论】:

    • 感谢您的明确解释。也许我应该回去重组我的应用程序的一部分。我想以正确的方式做事,但我认为将视图控制器逻辑与应用程序委托分开可能会更好 - 所以我的根视图控制器可以满足它的所有需要​​。这可以解释为什么在我的根视图控制器中如果我做了 self.view = tabbarController.view 而不是添加为子视图,我不会得到差距。很好的答案。如果可以的话,我会投票更多。
    • 听起来你的直觉在这里很好。这只是 Cocoa Touch 中我们现在必须解决的设计限制之一。请记住,尽管您不一定需要将 tabbarController.view 从您的应用程序委托添加到您的窗口。如果您认为这是最有意义的,您可以将它添加到您的视图控制器中。您只需要通过 keyWindow 方法或在 applicationDidFinishLaunching: 中将其设置为控制器上的属性来访问窗口对象。
    • 但这不是说tabbarcontroller.view 现在是window.view 的子视图了吗?但在我的情况下这是不正确的,我有一个广告视图,然后是第二个内容视图。我正在将 tabbarcontroller.view 添加到 contentview 中。以这种方式,视图控制器将根据广告处理内容/广告视图。如果我将 tabbarcontroller.view 添加到窗口,我认为我无法使用我的 viewcontroller 处理视图。你怎么看?
    • UITabBarController 类参考说,“部署标签栏界面时,您必须将此视图安装为窗口的根。与其他视图控制器不同,标签栏界面不应安装为子级另一个视图控制器。”我理解为什么您希望 tabbarcontroller.view 成为您案例中不同视图的子视图。不幸的是,您必须反对这样一个事实,即此类根据其视图是窗口的子视图的假设来调整其框架。考虑在实现 UITabBarDelegate 的自定义 UIViewController 中使用 UITabBar。
    • 有趣,如何将 20px 添加到 UITabBarController 的 viewcontroller 选项卡(子)以偏移 iOS7 状态栏?我尝试了许多 SO 解决方案,但都没有工作。 stackoverflow.com/questions/18921062/…
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-01-26
    • 2014-02-02
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-11-04
    相关资源
    最近更新 更多