我制作了一个关于我的问题的示例项目,以便您可以更好地理解它。你可以在这里得到它:
https://github.com/nwalter08/iOS-7-Container-View-Controller-Probs
我的问题是,我有一个UITabBarController
,其中包含一个Container UIViewController
,其中包含一个UINavigationController
,其中包含UIViewController
。我知道的很多:)
问题在于,当我在iOS 7上运行应用时,UIViewController
并未填充整个UINavigationController
的空间。当我在iOS 6中运行时,这不是问题。
一些特别说明是我将translucent
和tabBar
上的navigationBar
属性设置为NO。我也没有使用IB或故事板。
我对视图控制器进行了颜色编码,以便您可以看到UIViewController
太短并且显示黄色UINavigationController
背景。
iOS 6
iOS 7
更新 - 因此,rdelmar的答案适用于UIViews内部没有任何内容,但我发现我的代码内容被拉伸并且不适合。我很确定这是一个iOS错误,我向Apple提交了一个Radar。为了解决我的问题,我使用了UITabBarController替换https://github.com/jinthagerman/JBTabBarController
答案 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。
设置该标志后,您的视图应按预期定位。