18

我目前正在将我的应用程序转移到 iOS 7(我希望它保持与 iOS 6 兼容)。Apple NDA 没有涵盖这个问题,它是关于自动布局的问题(似乎 iOS 7 强制自动布局(编辑:错了,不是强制的))。

我有一个带有根视图控制器的导航控制器(很明显)。在 iOS 6 中,我没有使用自动布局,因此根视图控制器位于导航栏下方。在 iOS 7 中,框架原点不包括导航栏,所以我的内容的顶部被隐藏了......

您知道如何使用 Auto Layout 在导航栏上方制作整个视图吗?

谢谢 !

4

1 回答 1

22

在 iOS 7 上,您拥有指定导航栏的 topLayoutGuide。然后,您可以指定您希望 tableview 的约束位于 topLayoutGuide 而不是 superview 上。

这将帮助您了解它是否是 iOS7:

if ([self respondsToSelector:@selector(topLayoutGuide)])

所以它可以是这样的

NSString *verticalConstraint = @"V:|[v]|";
NSMutableDictionary *views = [NSMutableDictionary new];
views[@"v"] = self.tableview;
if ([self respondsToSelector:@selector(topLayoutGuide)]) {
    views[@"topLayoutGuide"] = self.topLayoutGuide;
    verticalConstraint = @"V:[topLayoutGuide][v]|";
}
[constraints addObjectsFromArray:[NSLayoutConstraint constraintsWithVisualFormat:verticalConstraint options:0 metrics:nil views:views]];
[self.view addConstraints:constraints];
于 2013-09-11T12:44:16.287 回答