自动布局:指定视图和导航栏之间的间距
Posted
技术标签:
【中文标题】自动布局:指定视图和导航栏之间的间距【英文标题】:Autolayout: Specify spacing between view and navigation bar 【发布时间】:2014-05-05 17:57:44 【问题描述】:我试图弄清楚我应该设置哪些约束来将视图放置在导航栏下方。问题是它的高度取决于当前的方向(纵向 44,横向 32),所以我不能使用确切的数字。
有什么特殊值可以用于约束吗?
【问题讨论】:
【参考方案1】:看到突出显示的顶部约束了吗?这将让您设置与相邻视图的固定距离。问题是您的导航栏可能位于嵌入式视图的顶部,这意味着您需要取消选中“顶部栏下方”设置,然后您才能为顶部布局管理器设置约束。
【讨论】:
我假设“Extend Edges”部分仅在 Storyboard 模式下可用,因为我似乎无法在简单的 Xib 编辑器中找到它。 无论如何,如果我想让我的背景在导航栏下怎么办?在这种情况下如何指定间距? 它也应该在 XIB 文件中,但它是控制器的一部分,而不是视图的一部分,并且大多数人只有在使用 Storyboard 时才会为添加控制器而烦恼。尽管UIViewController
有一个topLayoutGuide
属性,但您可以通过编程方式完成,然后只需将自动布局距离设置为XIB 文件中视图的顶部。
感谢您的指点。我会在弄清楚如何以编程方式指定约束后立即尝试。
Hmmmm...在这种情况下,您可能需要这样的东西: BOOL isLandscape() return UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation]); 【参考方案2】:
这正是 ios 7 提供 Top Layout Guide
和 Bottom Layout Guide
的原因,相对于它们创建你的约束,正确的事情就会发生。
【讨论】:
边缘在导航栏下方延伸时是否支持顶部布局指南?我注意到布局指南仅在关闭时显示为 IB Autolayout 中的对象......只是假设布局指南和框架边缘相同吗? 如果边缘在条下方延伸,那么是的,框架边缘和布局指南是相同的。【参考方案3】:使用顶部和底部布局指南创建约束可能是正确的解决方案,但它们仅在情节提要模式下可用。
如果它们不可用(或由于某种原因不工作),解决方案如下:
-
创建相对于超级视图顶部的约束(此时实际值并不重要,我们将在代码中设置它)。
为步骤 1 中的约束创建出口(与创建视图的方式相同)。
修改您的视图控制器代码:
- (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;
【讨论】:
以上是关于自动布局:指定视图和导航栏之间的间距的主要内容,如果未能解决你的问题,请参考以下文章