【发布时间】:2014-05-05 17:57:44
【问题描述】:
我试图弄清楚我应该设置哪些约束来将视图放置在导航栏下方。问题是它的高度取决于当前的方向(纵向 44,横向 32),所以我不能使用确切的数字。
有什么特殊值可以用于约束吗?
【问题讨论】:
标签: ios autolayout
我试图弄清楚我应该设置哪些约束来将视图放置在导航栏下方。问题是它的高度取决于当前的方向(纵向 44,横向 32),所以我不能使用确切的数字。
有什么特殊值可以用于约束吗?
【问题讨论】:
标签: ios autolayout
看到突出显示的顶部约束了吗?这将让您设置与相邻视图的固定距离。问题是您的导航栏可能位于嵌入式视图的顶部,这意味着您需要取消选中“顶部栏下方”设置,然后您才能为顶部布局管理器设置约束。
【讨论】:
UIViewController 有一个topLayoutGuide 属性,但您可以通过编程方式完成,然后只需将自动布局距离设置为XIB 文件中视图的顶部。
这正是 iOS 7 提供 Top Layout Guide 和 Bottom Layout Guide 的原因,相对于它们创建你的约束,正确的事情就会发生。
【讨论】:
使用顶部和底部布局指南创建约束可能是正确的解决方案,但它们仅在情节提要模式下可用。
如果它们不可用(或由于某种原因不工作),解决方案如下:
- (void)viewDidLoad {
//initial setup
UIInterfaceOrientation currentOrientation = [UIApplication sharedApplication].statusBarOrientation;
[self applyTopBarOffsetForOrientation:currentOrientation];
}
- (void)willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
[super willRotateToInterfaceOrientation:toInterfaceOrientation duration:duration];
[self applyTopBarOffsetForOrientation:toInterfaceOrientation];
}
- (void)applyTopBarOffsetForOrientation:(UIInterfaceOrientation) orientation {
BOOL isPhone = [UIDevice currentDevice].userInterfaceIdiom == UIUserInterfaceIdiomPhone;
self.topBarSpacingConstraint.constant = UIDeviceOrientationIsLandscape(orientation) && isPhone ? 52 : 64;
}
【讨论】: