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

Yoh*_*ent 18 iphone objective-c ios

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

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

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

谢谢 !

ksc*_*ler 22

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

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

if ([self respondsToSelector:@selector(topLayoutGuide)])
Run Code Online (Sandbox Code Playgroud)

所以它可以是那样的

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];
Run Code Online (Sandbox Code Playgroud)

  • 根据转换指南,您可以在界面构建器中为toplayout指南设置约束.知道怎么做吗? (3认同)
  • @shim你只能在故事板而不是XIB中这样做.很烦人! (3认同)