iOS 7导航栏隐藏内容

jdo*_*dog 18 objective-c ios ios7

我有一个在iOS 6中开发的应用程序.但现在在iOS 7中,甚至我的应用程序已经为iOS 6编译,但在iOS 7设备上运行顶部导航栏(iOS 7中的新巨人),我的内容被隐藏了.顶部导航栏覆盖它.如果我用CGRect手动向下移动它在iOS 7中看起来很好,但是现在iOS 6看起来很糟糕(在它上面的空间很大).

该应用程序是使用自动布局关闭构建的,因为自动布局是难以正确设置的方法.

我的问题是,是否有一种简单的方法可以仅针对iOS 7移动内容?我真的不想重新开启自动布局,花一个月时间尝试将所有UI元素重新安装到位.该应用程序相当复杂,有30多个屏幕和屏幕上的大量动画视图.

Hep*_*Kes 29

我认为即使iOS 7在一年多前推出,仍存在一些关于这种布局问题的误解.所以我最终决定进一步阐述我的答案.

这就是事情.

因为automaticallyAdjustsScrollViewInsets'默认值是YES,一个非常简单的解决方案可能是添加以下代码:

if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) { // if iOS 7
    self.edgesForExtendedLayout = UIRectEdgeNone; //layout adjustements
}
Run Code Online (Sandbox Code Playgroud)

进入ViewController的-viewDidLoad方法.

如果你想删除状态栏怪癖(由于条形半透明,所以它并不奇怪)添加self.navigationController.navigationBar.translucent = NO.默认值为YES. 注意:这与内容无关,因为半透明而与内容有关,但这是一个完全不同的故事!

因为extendedLayoutIncludesOpaqueBarsNO通过默认,self.navigationController.navigationBar.translucent = NO意味着基本上具有

self.edgesForExtendedLayout = UIRectEdgeLeft | UIRectEdgeRight| UIRectEdgeBottom; 
Run Code Online (Sandbox Code Playgroud)

或者,更一般地说,类似的东西(它就像伪代码一样提出想法......)

BOOL enableTopEdge =  extendedLayoutIncludesOpaqueBars && !navigationBarIsTranslucent
self.edgesForExtendedLayout = (enableTopEdge & UIRectEdgeTop) | UIRectEdgeLeft | UIRectEdgeRight | UIRectEdgeBottom; 
Run Code Online (Sandbox Code Playgroud)


pau*_*ler 10

您也可以尝试设置navigationBar.translucent = NO,如本答案中所述.


Zor*_*ayr 5

隐藏导航栏,请将以下内容添加到UIViewController:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    // Hide the top navigation bar.
    [self.navigationController.navigationBar setBackgroundImage:[UIImage new] forBarMetrics:UIBarMetricsDefault];
    self.navigationController.navigationBar.shadowImage = [UIImage new];
    self.navigationController.navigationBar.translucent = YES;
}
Run Code Online (Sandbox Code Playgroud)

显示导航栏,请使用以下命令:

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    // Show the top navigation bar.
    self.navigationController.navigationBar.translucent = NO;
}
Run Code Online (Sandbox Code Playgroud)

以下是iOS7上的结果:

导航栏被隐藏. 显示导航栏.

左侧的屏幕截图隐藏了导航栏,而右侧的图像显示了导航栏 - 表格内容正确隐藏在导航栏下方.

希望这可以帮助!