我尝试在iOS 7中测试我的应用程序,然后我发现我的视图显示在状态栏上...正如我读到的,在iOS 7中,状态栏被隐藏。那么如何让它兼容在iOS 6和iOS 7中运行?我是否必须为每个屏幕为不同的iOS版本制作不同的.xib文件?
我一直在阅读这篇文章: 如果标准应用程序的两个版本都应具有类似的布局,请使用“自动布局”创建在两个版本的iOS中均可正常运行的UI。要支持多个版本的iOS,请指定一组约束,Auto Layout可以使用这些约束来调整storyboard或XIB文件中的视图和控件(要了解有关约束的更多信息,请参阅“约束表达视图之间的关系”)。
如果标准应用的两个版本都应具有相似的布局,并且您没有使用自动布局,请使用偏移。要使用偏移,请首先更新iOS 7的UI。接下来,指定将早期UI中每个元素的原点,高度和宽度定义为iOS 7 UI中元素新位置偏移的值。
但是当我在.xib中使用autolayout时,它会显示一个错误,autolayout是iOS 6的先前版本。
如何解决此问题?
答案 0 :(得分:37)
iOS 7显然支持某些视图隐藏的状态栏,但不支持其他视图。要为所有视图隐藏它,请执行以下操作:
Hide during application launch
,以支持以前的操作系统版本。View controller-based status bar appearance
并将其设置为NO
。 答案 1 :(得分:24)
您可能需要在每个视图控制器上添加以下代码。
- (void)viewDidLoad
{
[super viewDidLoad];
if ([self respondsToSelector:@selector(setNeedsStatusBarAppearanceUpdate)])
{
[self prefersStatusBarHidden];
[self performSelector:@selector(setNeedsStatusBarAppearanceUpdate)];
}
else
{
// iOS 6
[[UIApplication sharedApplication] setStatusBarHidden:YES withAnimation:UIStatusBarAnimationSlide];
}
}
// Add this method
- (BOOL)prefersStatusBarHidden {
return YES;
}
答案 2 :(得分:9)
我有同样的问题。现在我做了两个黑客,并将决定我将去哪个:
UIStatusBarHidden
和UIViewControllerBasedStatusBarAppearance
设置为true来完全隐藏状态栏。如何为状态栏区域创建Autolayout帐户?
好吧,我明白了。
在子视图中(在我的情况下为BRSMyListSubViewController
),在viewDidLoad
中,您需要设置这两个中的一个
self.edgesForExtendedLayout = UIRectEdgeNone;
self.automaticallyAdjustsScrollViewInsets = NO;
OR
self.edgesForExtendedLayout = UIRectEdgeNone;
self.extendedLayoutIncludesOpaqueBars = YES;
有趣的是,在根视图控制器中,这些值分别设置为默认UIRectEdgeAll
,NO
和YES
,但其tableView
不在导航栏和页脚下
我不知道为什么会这么不合逻辑。
同样奇怪的是edgesForExtendedLayout
必须与其他两个属性中的一个混合,即使它明确地对行为负责。
答案 3 :(得分:8)
如果您想在iOS 7下使用Xcode 5显示状态栏,只需重新排列按钮和其他子视图,以在状态栏周围留出足够的空间。但是,等一下!我也喜欢支持iOS 6。我该怎么做?
我找到documentation from Apple,并在文档中找到了“支持两个版本的标准应用”标题。
如果您正在编辑XIB file,请选择它并单击助理编辑器。你可以在那里找到“手动,自动......”菜单。然后选择“预览”。
然后你会找到一个并排的视图布局。然后你会注意到右窗格右侧底部有一个弹出按钮(视图);它说“iOS 7及更高版本”。您可以选择“iOS 6.1及更早版本”。 WOA!现在,您可以在不影响iOS 7布局的情况下对iOS 6.1进行调整。
如果您正在处理故事板,它基本上是相同的。您选择一个视图控制器对象,然后单击助手编辑器模式,选择“预览”,然后选择“iOS7及更高版本”...... Bluh Bluh Bluh。
我不确定,但只有助理编辑才能切换到iOS 7 + / iOS 6-模式。我刚刚发现这个,所以请指出,如果有任何误解或其他伎俩。
答案 4 :(得分:3)
无需构建multi-xib。我认为你的问题是“20px”:同样的XIB文件在iOS 6中看起来很棒,但它在iOS 7中错过了20个像素。
例如,您有一个视图,它的Y = 0.在iOS 6中,它位于状态栏的底部。在iOS 7中,它出现在状态栏上。
您应该使用Xcode 5打开XIB文件并启用助理编辑器。请按照以下步骤操作:
选择文件检查器,并将“查看为”切换为“iOS 7及更高版本”
选择尺寸检查器,并使用“-20”
已经完成了!
答案 5 :(得分:0)
您只需要检查一下iOS 7.0的主要UIView大小。后来& iOS 6.0&更低,可能你会有所了解。
从iOS 7 Apple改变主视图大小=固定这意味着如果你添加导航栏,tabbar你的视图大小保持不变[iPhone 4s:320 * 480,iPhone 5:320 * 568]。