我有一个UIViewController,MyViewController,顶部有一个UIToolbar。使用界面构建器,doc outline如下所示:
View
- subview1
- subview2
- UIToolbar
- Bar Button Item1
- Bar Button Item2
- Bar Button Item3
我的应用程序中使用了MyViewController。有时它在UINavigationcontroller中,有时它在UIPopoverView中。
当它出现在UINavigationController中时,导航栏会覆盖UIToolbar以及View顶部附近的所有其他内容。在this screenshot中,您可以看到UIToolbar完全被遮盖,并且UIButton带有绿灯泡的图像被部分覆盖。
任何需要锚定到顶部和状态栏下方的视图(即UIToolbar,UIButton等)都需要额外的工作才能正确放置。
它继续提供一个解决方案,只需使用约束将VC的内容向下移动x像素,在我的例子中是UIToolbar。这似乎不是一个好的解决方案,因为它假设您总是希望将内容向下移动到导航栏下方。在我的情况下,我显然不这样做,因为MyViewController并不总是在UINavigationController中。当我使用这些文档中提供的约束解决方案时,在MyViewController不在UINavigationController中的所有情况下,UIToolbar奇怪地从顶部向下浮动x像素。
我是否错过了我应该如何在UINavigationController中显示VC的内容?非常感谢。
答案 0 :(得分:19)
在iOS7中,UINavigationBar具有半透明属性。这样,UINavigationViewController的子VC视图默认位于UINavigationBar下。
如果您不需要获得半透明效果,请使用以下代码关闭此属性。
self.navigationController.navigationBar.translucent = NO
您也可以使用@ ldindu的方式来满足您的需求。
答案 1 :(得分:8)
如果您在iOS 7.0版本上运行,那么您需要设置iOS 7.0中新引入的以下属性,如下所示
self.edgesForExtendedLayout = UIRectEdgeNone;
默认情况下,edgesForExtendedLayout属性设置为UIRectEdgeAll,这意味着视图控制器默认使用全屏布局。
答案 2 :(得分:0)
确定您使用的是iOS 7.
#define IS_IOS7 [[[UIDevice currentDevice] systemVersion] hasPrefix:@"7"];
- (float)topPadding
{
return (IS_IOS7) ? 20.0f : 0.0f;
}
使用[self topPadding]
增加框架的Y轴将其向下移动。
我希望你的问题得到解决。
答案 3 :(得分:0)
如果用Swift编写,那就是edgesForExtendedLayout = UIRectEdge()