我今天已将iPhone更新到iOS 7并重新编译我的应用程序,并且.xib文件和设备上的所有视图都向上移动,其上半部分被导航栏隐藏。在viewController
我设置self.edgesForExtendedLayout = UIRectEdgeNone;
和iOS 7现在一切看起来都不错但是当我使用Deployment Target 6.0编译我的项目并在iOS 6设备上测试它时,导航栏再次隐藏所有视图。如何我可以让它们同时在iOS 7和iOS 6上保持一致吗?我现在不想破坏iOS 6支持。
答案 0 :(得分:16)
尝试使用:
navigationController.navigationBar.translucent = NO;
答案 1 :(得分:13)
试试这个:
#define SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(v) ([[[UIDevice currentDevice] systemVersion] compare:v options:NSNumericSearch] != NSOrderedAscending)
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
self.edgesForExtendedLayout = UIRectEdgeNone;
}
答案 2 :(得分:7)
所以这就是我所做的。这不是最干净的代码,您需要确保滚动视图不会产生奇怪的结果。
基本上我按导航栏的高度向下移动所有子视图(45)。对于我的滚动视图/ tableviews,我的应用程序总是在屏幕的底部,我将它们的高度减少45,这样你仍然可以达到目的。这是某些应用程序的解决方案,但您应该确保所有滚动和表格视图都要像这样缩小。
因为它不是递归的,所以你不必担心滚动视图中的表视图或类似的东西。
- (void)viewDidLoad
{
[super viewDidLoad];
if (SYSTEM_VERSION_GREATER_THAN_OR_EQUAL_TO(@"7.0")) {
self.edgesForExtendedLayout = UIRectEdgeNone;
} else {
[self moveAllSubviewsDown];
}
}
- (void) moveAllSubviewsDown{
float barHeight = 45.0;
for (UIView *view in self.view.subviews) {
if ([view isKindOfClass:[UIScrollView class]]) {
view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y + barHeight, view.frame.size.width, view.frame.size.height - barHeight);
} else {
view.frame = CGRectMake(view.frame.origin.x, view.frame.origin.y + barHeight, view.frame.size.width, view.frame.size.height);
}
}
}
答案 3 :(得分:2)
如果您在Interface Builder中使用故事板与Autolayout,您可以使用“顶部布局指南”为视图顶部添加约束
答案 4 :(得分:2)
如果你正在使用Interface Builder,我已经运气好了取消选中“extend edges”>的设置。 “顶层酒吧”:
适用于iOS 7和6版本。
答案 5 :(得分:1)
将此值添加到您的应用程序plist:“查看基于控制器的状态栏外观”并将其设置为“NO”。