iOS 7 到 iOS 6 支持 [关闭]

Posted

技术标签:

【中文标题】iOS 7 到 iOS 6 支持 [关闭]【英文标题】:iOS 7 to iOS 6 support [closed] 【发布时间】:2013-10-31 12:08:26 【问题描述】:

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

当我将部署目标更改为 6.0 时,屏幕上的位置很奇怪。它把所有东西都向下移动了。

我该如何解决?我必须根据iOS版本手动处理定位吗? 顺便说一句,我没有使用自动布局。

【问题讨论】:

你有没有尝试过?如果是这样,您尝试过什么? 你试过 self.edgesForExtendedLayout=UIRectEdgeNone; 如果你没有使用AUTO布局,你将不得不手动处理... 还没有,但我可以根据 iOS 版本手动放置它们。我想知道是否有更好的解决方案。 @MuhammadNasir edgesForExtendedLayout 是 iOS7 属性。他们让它在 iOS 7 中运行,而不是在 iOS 6 中,所以在 iOS 6 设备上运行时它不会做任何事情。 【参考方案1】:

至少有两种处理方式:

1.这里最大的区别是y方向上的0实际上在iOS7的屏幕上高出66px,默认情况下,因为视图延伸到导航栏和状态栏下方。

如果您使用情节提要,最简单的解决方法是在选择视图控制器时取消选中“顶部栏下方”和“底部栏下方”选项。

不过,这并不是 Apple 在 iOS7 中的发展方向。

2.您可以使用视图控制器的edgesForExtendedLayout 属性执行与#1 相同的操作。

3. 如果您没有使用自动布局,那么您可以选择您的主视图并更改 iOS6/7 增量选项。在这种情况下,您需要在 delta-Y 框中输入 -66,在 delta-height 框中输入 66。这些本质上是当您的应用在 iOS6 上运行时应用于视图的插图。

4. 使用带有适当约束的自动布局,它应该可以正常工作。我说应该是因为如果您根据关系而不是框架和位置来考虑布局,那么使用自动布局会更容易。

【讨论】:

1 和 2 不起作用,1 使结果类似于 iOS 6 屏幕截图。 但他们正在工作,因为现在的行为与它在 iOS6 上的工作方式是一致的。现在内容不在导航栏和状态栏下方,您需要将视图中的内容向上移动 66 像素,一切就绪(除非您希望行为在两个版本的操作系统之间有所不同) .【参考方案2】:

这些是 iOS 7 UI 的基础知识。您必须阅读过渡文档,这是 iOS 开发人员必须的(当然,您必须登录):

https://developer.apple.com/library/ios/documentation/UserExperience/Conceptual/TransitionGuide/index.html#//apple_ref/doc/uid/TP40013174

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

为 ios 7 构建用户界面(视频编号 201)

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

您可以在 iTunes 中免费找到它们。

关于你的问题:

导致您出现问题的是新的 iOS 7 方法。在 iOS 7 中,导航栏默认为半透明。在 iOS 6 中它不是。 在半透明的情况下 - 原点 0,0 就在导航栏下方。因此,如果在第一种情况下具有这种来源的 UIView 将位于导航栏下,在第二种情况下 - 波纹管。您甚至可以注意到新的 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

并进行适当的代码格式化,例如在不同情况下更改原点。

解释得很好,文档和视频中有许多更重要的更新,如果您不仅想盲目开发,而且还想了解自己在做什么,那么您真的应该查看这些更新。

【讨论】:

感谢您的详细回复,我会尽快查看资源。【参考方案3】:

    进行备份或复制

    将“查看方式”属性从 7.0 及更高版本切换回 iOS 6.1 及更早版本。 请注意,切换回 iOS7 之前的所有设置都会丢失

    重新排列所有子视图的 x 坐标,因为现在一切都会有点低落。(因为在 iOS7 中,默认 x=0 坐标位于导航和状态栏下方,并且在预iOS7 它从导航栏或状态栏的正上方开始)

    在 viewDidLoad 添加以下行:

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

【讨论】:

【参考方案4】:

你试过了吗

self.edgesForExtendedLayout=UIRectEdgeNone;

试试

 if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) 
     // here you go with iOS 7
     self.edgesForExtendedLayout=UIRectEdgeNone;
 

【讨论】:

是的,我试过了,它导致 iOS 6 崩溃。 edgesForExtendedLayout 是 iOS7 属性。他们让它在 iOS 7 中运行,而不是在 iOS 6 中,所以在 iOS 6 设备上运行时这不会做任何事情,除非导致它中断 你应该改用这一行:if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) [self setEdgesForExtendedLayout:UIRectEdgeNone]; @TussLászló 是的,您可以使用它,但问题不在于 iOS7,它在 iOS7 中运行良好。他们正在倒退,他们正试图使其现在在 iOS6 中工作。因此,即使是那条线也不会有所作为。 但它需要解决方案,看我的回答

以上是关于iOS 7 到 iOS 6 支持 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Xcode 5 中使用不同的图像 iOS 6 和 iOS 7 [关闭]

我可以同时支持 iOS 6 和 iOS 7 吗?

应用程序支持 iOS 6 和 iOS 7

支持 iOS 6 和 7

IOS 6 在 ios 7 中开发的应用程序支持?

如何使用 xcode 6.4 支持 iOS 7.0?