我今天将我的 iPhone 更新到了 iOS 7,并为它重新编译了我的应用程序,.xib 文件和设备上的所有视图都向上移动,它们的上部被导航栏隐藏。在我的viewController
I set self.edgesForExtendedLayout = UIRectEdgeNone;
和 iOS 7 上,现在一切看起来都不错,但是当我使用 Deployment Target 6.0 编译我的项目并在 iOS 6 设备上对其进行测试时,导航栏再次隐藏了所有视图。如何让它们在 iOS 7 上看起来一致和 iOS 6 同时?我现在不想破坏对 iOS 6 的支持。
问问题
9920 次
6 回答
16
尝试使用:
navigationController.navigationBar.translucent = NO;
于 2013-09-19T12:28:37.417 回答
13
Try this:
#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;
}
于 2013-09-19T12:37:53.430 回答
7
所以这就是我所做的。这不是有史以来最干净的代码,您需要确保滚动视图不会得到奇怪的结果。
基本上我将所有子视图向下移动导航栏的高度(45)。对于我的滚动视图/表格视图,在我的应用程序中始终位于屏幕底部,我将它们的高度降低了 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);
}
}
}
于 2013-09-19T20:00:42.683 回答
2
如果您在带有 Autolayout 的 Interface Builder 中使用 Storyboard,则可以使用“顶部布局指南”为视图顶部添加约束
于 2013-09-26T01:55:17.133 回答
2
如果您使用的是 Interface Builder,我很幸运可以取消选中“扩展边缘”>“顶部栏下”的设置:
在 iOS 7 和 6 中为我工作。
于 2014-01-28T20:27:11.513 回答
1
将此值添加到您的应用 plist:“查看基于控制器的状态栏外观”并将其设置为“否”。
于 2013-09-19T23:50:18.767 回答