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 支持 [关闭]的主要内容,如果未能解决你的问题,请参考以下文章