iOS 7容器视图控制器显示小于应有的详细视图控制器

时间:2014-02-06 21:52:00

标签: ios objective-c uiviewcontroller

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

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

我的问题是,我有一个UITabBarController,其中包含一个Container UIViewController,其中包含一个UINavigationController,其中包含UIViewController。我知道的很多:)

问题在于,当我在iOS 7上运行应用时,UIViewController并未填充整个UINavigationController的空间。当我在iOS 6中运行时,这不是问题。

一些特别说明是我将translucenttabBar上的navigationBar属性设置为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的答案适用于UIViews内部没有任何内容,但我发现我的代码内容被拉伸并且不适合。我很确定这是一个iOS错误,我向Apple提交了一个Radar。为了解决我的问题,我使用了UITabBarController替换https://github.com/jinthagerman/JBTabBarController

5 个答案:

答案 0 :(得分:1)

您的问题出现在RedContainerViewController的loadView方法的以下行中,

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

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

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

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

答案 3 :(得分:0)

这可以修复它,但可能有其他不需要的副作用。

--- 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;

答案 4 :(得分:0)

请参阅我对类似问题的回答right here

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