早些时候,我在我的项目中使用iOS 6.1。最近我已经切换到iOS 7.因为,我知道很多变化,我更新了我的代码..但我发现了一个奇怪的行为。我在每个屏幕上的视图都隐藏在导航栏下方。重新定位视图解决了iOS7的问题,但是为较旧的iOS版本带来了问题。
任何人都可以解释一下,原因是什么?为什么会这样? iOS 7中发生了哪些变化导致了这个问题?
任何帮助将不胜感激..
答案 0 :(得分:123)
尝试navigationBar.translucent = NO;
,iOS7默认为YES
。
查看UINavigationBar
文档的这一部分也很好:
iOS 7上的新行为。默认为YES。你可能强迫不透明 通过将属性设置为NO来设置背景。如果导航栏有一个 自定义背景图像,默认值是从alpha值推断出来的 图像是 - 如果它有任何像素α<1的像素。 1.0如果你发送 setTranslucent:是一个带有不透明自定义背景图像的条形图 将小于1.0的系统不透明度应用于图像。如果你发送 setTranslucent:NO为具有半透明自定义背景图像的条形图 它将使用条形图为图像提供不透明的背景 barTintColor如果已定义,则为UIBarStyleBlack为黑色或为白色 如果barTintColor为零,则为UIBarStyleDefault。
修改强>:
如果您在具有旧iOS版本的设备/模拟器中运行项目,则设置'navigationBar.translucent'值会导致异常。
所以你可以像这样添加一个版本检查:
float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
if (systemVersion >= 7.0)
{
navigationBar.translucent = NO;
}
另一种选择是设置:
vc.edgesForExtendedLayout = UIRectEdgeNone;
Swift 3 :
vc.edgesForExtendedLayout = []
答案 1 :(得分:44)
您可以在viewController中的导航栏下停止您的观点:
self.edgesForExtendedLayout = UIRectEdgeNone;
答案 2 :(得分:21)
Swift 3 +:
channel
答案 3 :(得分:11)
如果您的应用中不需要半透明导航栏,则可以在iOS7和iOS6上修复此问题而无需更改代码。
在故事板中选择导航控制器,然后打开“属性检查器”。然后在“模拟指标”下将“顶栏”设置为某个值但不是“半透明”:
现在,你对iOS6和iOS7的看法与之前的定位相同。
答案 4 :(得分:9)
this list上的第7点就可以了。您仍然需要将它包装在iOS 7检查代码中,如@ null的答案:
float systemVersion = [[[UIDevice currentDevice] systemVersion] floatValue];
if (systemVersion >= 7.0) {
viewController.edgesForExtendedLayout = UIRectEdgeNone;
}
整篇文章对于转换到iOS 7的用户非常有用。
答案 5 :(得分:5)
将此属性用于VC,以避免ur状态栏与VC Swift重叠:
self.edgesForExtendedLayout = []
目标C
self.edgesForExtendedLayout = UIRectEdgeNone;
答案 6 :(得分:3)
查找此键:UIViewControllerBasedStatusBarAppearance
。
它已在你的应用程序的信息PLIST文件中使用,并将显示为:
查看基于控制器的状态栏外观
这将允许您控制状态栏的外观。状态栏有一堆API更改,请查看新UIViewController
方法的文档,例如
- (void)prefersStatusBarHidden;
答案 7 :(得分:2)
在Swift 2.2中,使用
self.edgesForExtendedLayout = .None
答案 8 :(得分:0)
对我而言,透明Navigation Bar
的最佳方法是更改条形图的shadowImage和backgroundImage。
navigationController?.navigationBar.isTranslucent = true
navigationController?.navigationBar.backgroundColor = nil
navigationController?.navigationBar.setBackgroundImage(UIImage(named: "navBarBackground")?.resizableImage(withCapInsets: .zero, resizingMode: .stretch), for: .default)
navigationController?.navigationBar.shadowImage = UIImage()