我有一个在 iOS 7 上运行的应用程序。现在我要支持的是 6+。这是iOS 7的屏幕截图。
当我将部署目标更改为 6.0 时,屏幕上的位置很奇怪。它使一切都向下移动。
我该如何解决?我必须根据iOS版本手动处理定位吗?顺便说一句,我没有使用自动布局。
我有一个在 iOS 7 上运行的应用程序。现在我要支持的是 6+。这是iOS 7的屏幕截图。
当我将部署目标更改为 6.0 时,屏幕上的位置很奇怪。它使一切都向下移动。
我该如何解决?我必须根据iOS版本手动处理定位吗?顺便说一句,我没有使用自动布局。
至少有两种处理方法:
1.这里最大的区别是y方向的0实际上在iOS7的屏幕上高出66px,默认情况下,因为视图在导航栏和状态栏下方延伸。
如果您使用情节提要,最简单的解决方法是在选择视图控制器时取消选中“顶部栏下方”和“底部栏下方”选项。
然而,这并不是苹果在 iOS7 中的发展方向。
2.您可以使用视图控制器的edgesForExtendedLayout属性执行与 #1 相同的操作。
3.如果您不使用自动布局,那么您可以选择您的主视图并更改 iOS6/7 增量选项。在这种情况下,您需要在 delta-Y 框中输入 -66,在 delta-height 框中输入 66。这些本质上是当您的应用在 iOS6 上运行时应用于视图的插图。
4.使用具有适当约束的自动布局,它应该可以工作。我说应该是因为如果您根据关系而不是框架和位置来考虑布局,那么使用自动布局会更容易。
这些是 iOS 7 UI 的基础知识。您必须阅读过渡文档,这是 iOS 开发人员必须的(当然,您必须登录):
而且您肯定必须观看 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
}
并进行正确的代码格式化,例如在不同情况下更改原点。
解释得很好,文档和视频中有许多更重要的更新,你真的应该检查一下,如果你不仅想盲目地开发,而且还想了解你在做什么。
进行备份或复制
将“查看方式”属性从 7.0 及更高版本切换回 iOS 6.1 及更早版本。
请注意,切换回 iOS7 之前的所有设置都会丢失
重新排列所有子视图的 x 坐标,因为现在一切都会变得更糟。
(因为在 iOS7 中默认的 x=0 坐标位于导航栏和状态栏下方,而在 iOS7 之前的版本中,它从导航栏或状态栏的正上方开始)
在 viewDidLoad 添加以下行:
if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) [self setEdgesForExtendedLayout:UIRectEdgeNone];
你试过了吗
self.edgesForExtendedLayout=UIRectEdgeNone;
尝试
if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {
// here you go with iOS 7
self.edgesForExtendedLayout=UIRectEdgeNone;
}