带导航栏和视图控制器的自动布局(iOS 7)

时间:2013-09-04 00:59:05

标签: iphone ios objective-c

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

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

您是否知道如何使用自动布局在导航栏上方创建整个视图?

谢谢!

1 个答案:

答案 0 :(得分: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];