Iphone iOS 7到iOS 6支持

Iphone iOS 7到iOS 6支持,iphone,objective-c,ios6,ios7,xcode5,Iphone,Objective C,Ios6,Ios7,Xcode5,我有一个应用程序在iOS 7上运行。现在我要支持的是6+。以下是iOS 7的屏幕截图 当我将部署目标更改为6.0时,屏幕上的位置很奇怪。它使一切都向下移动 我怎样才能修好它?我是否必须根据iOS版本手动处理定位? 顺便说一句,我没有使用自动布局。这些是iOS 7用户界面的基础。您必须阅读转换文档,这是iOS开发人员的必备工具。当然,您必须登录: 你一定要看WWDC的电影,尤其是: 构建ios 7视频201的用户界面 为ios 7视频编号214自定义应用程序的外观 你可以在iTunes中免费找到它

我有一个应用程序在iOS 7上运行。现在我要支持的是6+。以下是iOS 7的屏幕截图

当我将部署目标更改为6.0时,屏幕上的位置很奇怪。它使一切都向下移动

我怎样才能修好它?我是否必须根据iOS版本手动处理定位?
顺便说一句,我没有使用自动布局。

这些是iOS 7用户界面的基础。您必须阅读转换文档,这是iOS开发人员的必备工具。当然,您必须登录:

你一定要看WWDC的电影,尤其是:

构建ios 7视频201的用户界面

为ios 7视频编号214自定义应用程序的外观

你可以在iTunes中免费找到它们

关于你的问题:

正是新的iOS 7方法导致了您的问题。在iOS 7中,导航条由deafult透明。在iOS 6中,它不是。 如果是半透明的,原点{0,0}就在导航栏的正下方。因此,如果在第一种情况下,具有该原点的UIView将位于导航栏下,在第二种情况下,则为bellow。你甚至可以注意到新的iOS 7方法,它使它下面的一切都变得漂亮和模糊——这要感谢半透明

要修复它,请使用

if (floor(NSFoundationVersionNumber) <= NSFoundationVersionNumber_iOS_6_1) {
   // Load resources for iOS 6.1 or earlier
} else {
   // Load resources for iOS 7 or later
}
并进行适当的代码格式化,如在不同情况下更改原点

这一点解释得很好,文档和视频中还有很多更重要的更新,如果你不只是想盲目开发,还想了解自己在做什么的话,你真的应该查看这些更新。

你尝试过吗

self.edgesForExtendedLayout=UIRectEdgeNone;
试一试


至少有两种方法可以处理此问题:

一,。这里最大的区别是y方向上的0实际上比iOS7屏幕上的高66px,因为视图在导航栏和状态栏下扩展

如果您使用的是故事板,最简单的修复方法是在选择视图控制器时取消选中“顶栏下方”和“底栏下方”选项

然而,这并不是苹果在iOS7中的发展方向

二,。通过使用视图控制器的属性,可以执行与1相同的操作

三,。如果未使用autolayout,则可以选择主视图并更改iOS6/7增量选项。在这种情况下,您需要在“增量Y”框中输入-66,在“增量高度”框中输入66。这些基本上是应用程序在iOS6上运行时应用于视图的插入

四,。使用带有适当约束的autolayout,它应该可以正常工作。我之所以说应该,是因为如果从关系而不是框架和位置的角度来考虑布局,那么使用自动布局就更容易了

备份或复制

将View as属性从7.0及更高版本切换回iOS 6.1及更低版本。 请注意,在切换回之前的iOS7设置后,您的所有设置都将丢失

将x坐标重新排列到所有子视图中,因为现在一切都会有点沮丧。 因为在iOS7中,默认的x=0坐标位于导航和状态栏下方,而在iOS7之前的版本中,它从导航栏或状态栏的正上方开始

在viewDidLoad中添加以下行:

if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) [self setEdgesForExtendedLayout:UIRectEdgeNone];

你试过什么吗?如果是,您尝试过什么?您尝试过self.edgesForExtendedLayout=UIRectEdgeNone;如果您不使用自动布局,您将不得不手动处理它…还没有,但我可以通过根据iOS版本手动放置它们来完成。我想知道是否有更好的解决方案。@MuhammadNasir edgesForExtendedLayout是iOS7的一个属性。他们让它在iOS 7中工作,而不是在iOS 6中工作,因此在iOS 6设备上运行时,这不会起任何作用。是的,我尝试过,它会在iOS 6上导致崩溃。edgesForExtendedLayout是iOS 7属性。他们让它在iOS 7中工作,而不是在iOS 6中工作,因此在iOS 6设备上运行时,这不会起任何作用,只会导致它中断。您应该改为使用以下行:if[self respondsToSelector:@selectorsetEdgesForExtendedLayout:[self-setEdgesForExtendedLayout:UIRectEdgeNone]@TussLászló是的,你会使用它,但问题不是iOS7,它在iOS7中运行良好。他们正在倒退,他们现在正试图让它在iOS6中工作。因此,即使是这一行也不会有什么不同。但它需要解决方案,请参阅我的回答谢谢你的详细答复,我将随时查看资源。1和2不起作用,1产生的结果与iOS 6屏幕截图中的结果类似。但它们起作用,因为现在的行为与iOS 6上的工作方式一致。现在,内容不在导航栏和状态栏下,您需要将内容在视图中向上移动66个像素,并且您都已设置好,除非您希望两个版本的操作系统之间的行为有所不同。
if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) [self setEdgesForExtendedLayout:UIRectEdgeNone];