iOS 7 导航栏隐藏内容

标签 ios objective-c ios7

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

该应用程序是在关闭自动布局的情况下构建的,因为自动布局很难正确设置。

我的问题是,是否有一种简单的方法可以仅针对 iOS 7 向下移动内容?我真的不想不得不重新打开自动布局并花一个月的时间试图让所有的 UI 元素恢复原位。该应用程序非常复杂,有 30 多个屏幕和许多屏幕上的动画 View 。

最佳答案

我认为,即使 iOS 7 已经推出一年多以前,围绕这个布局问题仍然存在一些误解。所以我最终决定进一步阐述我的答案。

事情是这样的。

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

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

进入 ViewController 的 -viewDidLoad 方法。

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

因为extendedLayoutIncludesOpaqueBars默认是NOself.navigationController.navigationBar.translucent = NO意味着基本上有

self.edgesForExtendedLayout = UIRectEdgeLeft | UIRectEdgeRight| UIRectEdgeBottom; 

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

BOOL enableTopEdge =  extendedLayoutIncludesOpaqueBars && !navigationBarIsTranslucent
self.edgesForExtendedLayout = (enableTopEdge & UIRectEdgeTop) | UIRectEdgeLeft | UIRectEdgeRight | UIRectEdgeBottom; 

关于iOS 7 导航栏隐藏内容,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19081697/

相关文章:

ios - 仅请求始终授权,而不请求使用时授权

ios - UIImage initWithData : blocking UI thread from async dispatch?

ios - 当 IOS 应用程序不在前台时,如何检测它是否被杀死。 IOS 7

ios - 如何在 objective-c 中实现 "didset of swift"?

ios - UIColor patternImage 在 iOS 7 中不起作用

iphone - 如何确定我的应用程序支持的最旧的 iOS 版本?

ios - UICollectionViewCell Selection 选择/突出显示每 5 个单元格

android - isVideoOffered() 在 Android/IOS 中不工作

ios - 无法使 UILabel 文本发光

ios - API MISUSE(APPLE) 'NSMutableArray' 方法 'addObject:' 的参数不能为 nil