0

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

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

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

4

4 回答 4

2

至少有两种处理方法:

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

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

顶栏下方和底栏下方

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

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

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

iOS6/7 增量

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

于 2013-10-31T12:26:54.033 回答
1

这些是 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
}

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

解释得很好,文档和视频中有许多更重要的更新,你真的应该检查一下,如果你不仅想盲目地开发,而且还想了解你在做什么。

于 2013-10-31T12:16:21.693 回答
0
  1. 进行备份或复制

  2. 将“查看方式”属性从 7.0 及更高版本切换回 iOS 6.1 及更早版本。 文件检查器/界面生成器文档
    请注意,切换回 iOS7 之前的所有设置都会丢失

  3. 重新排列所有子视图的 x 坐标,因为现在一切都会变得更糟。
    (因为在 iOS7 中默认的 x=0 坐标位于导航栏和状态栏下方,而在 iOS7 之前的版本中,它从导航栏或状态栏的正上方开始)

  4. 在 viewDidLoad 添加以下行:

    if ([self respondsToSelector:@selector(setEdgesForExtendedLayout:)]) [self setEdgesForExtendedLayout:UIRectEdgeNone];
    
于 2013-10-31T13:36:02.120 回答
-2

你试过了吗

self.edgesForExtendedLayout=UIRectEdgeNone;

尝试

 if (NSFoundationVersionNumber > NSFoundationVersionNumber_iOS_6_1) {
     // here you go with iOS 7
     self.edgesForExtendedLayout=UIRectEdgeNone;
 }
于 2013-10-31T12:16:29.700 回答