【问题标题】:iOS 7 Container View Controller shows detail view controller smaller than it should beiOS 7 Container View Controller 显示的详细视图控制器小于应有的大小
【发布时间】:2014-03-04 02:28:27
【问题描述】:

我为我的问题制作了一个示例项目,以便您更好地理解它。你可以在这里得到它:

https://github.com/nwalter08/iOS-7-Container-View-Controller-Probs

我的问题是我有一个UITabBarController,它拥有一个Container UIViewController,它拥有一个UINavigationController,它拥有一个UIViewController。我知道很多:)

问题是当我在 iOS 7 上运行应用程序时,UIViewController 并没有填满整个UINavigationController 的空间。当我在 iOS 6 中运行时,这不是问题。

一些特别说明是我将tabBarnavigationBar 上的translucent 属性设置为NO。我也没有使用 IB 或故事板。

我已经对视图控制器进行了颜色编码,以便您可以看到UIViewController 太短并且黄色的UINavigationController 背景正在显示。

iOS 6

https://www.dropbox.com/s/lpl6wtmoy3dsn3c/iOS%20Simulator%20Screen%20shot%20Feb%206%2C%202014%2C%202.45.56%20PM.png

iOS 7

https://www.dropbox.com/s/f5r5oltb4ookteh/iOS%20Simulator%20Screen%20shot%20Feb%206%2C%202014%2C%202.46.21%20PM.png

更新—— 因此,rdelmar 的答案适用于其中没有内容的 UIView,但我发现我的代码内容被拉伸并且不适合。我很确定这是一个 iOS 错误,我向 Apple 提交了 Radar。为了解决我的问题,我使用了 UITabBarController 替换 https://github.com/jinthagerman/JBTabBarController

【问题讨论】:

标签: ios objective-c uiviewcontroller


【解决方案1】:

你的问题出在RedContainerViewController的loadView方法的下面一行,

UIView *contentView = [[UIView alloc] initWithFrame:[[UIScreen mainScreen] bounds]];

它的视图不应该是屏幕的大小,因为它嵌入在标签栏控制器中。将该行更改为 [[UIView alloc] init],它应该可以工作。

【讨论】:

  • 叮叮叮我们赢了!谢谢!
  • @nickchuckwalter,您应该通过接受答案来奖励获胜者。
【解决方案2】:

细节视图控制器不小。它在 iOS 7 中的 navigationBar 下。你可以设置 navigationBar.translucent =NO 或者你可以在你的 xib/storyboard 中设置 delta(如果你有的话)

【讨论】:

  • navigationBar.translucent 已设置为 NO。蓝色视图控制器仍然太短。
【解决方案3】:

将导航栏设置为不透明并不意味着该视图不再位于其下方。它只是意味着它在它下面不再可见。

在您的视图控制器上将edgesForExtendLayout 设置为UIRectEdgeNone,您的视图实际上将从导航栏下方移动到视图控制器的可见区域。

【讨论】:

  • 我已经尝试过了,它并没有改变任何东西。如果它适合你,请在我的 github 项目上提出拉取请求,以便我可以看到你的代码。
【解决方案4】:

这可以解决问题,但可能会产生您不想要的其他副作用。

--- a/TabBarContainerNavProblem/MyTabBarViewController.m
+++ b/TabBarContainerNavProblem/MyTabBarViewController.m
@@ -31,7 +31,7 @@
         BOOL isAtLeast7 = [version floatValue] >= 7.0;

         if (isAtLeast7) {
-            self.tabBar.translucent = NO;
+            self.tabBar.translucent = YES;
         }
     }
     return self;

【讨论】:

    【解决方案5】:

    请查看我对类似问题的回答right here

    设置该标志后,您的视图应按预期定位。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-04-27
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-04-20
      • 1970-01-01
      • 2015-11-27
      • 2014-10-04
      相关资源
      最近更新 更多