Autolayout:指定视图和导航栏之间的间距

时间:2014-05-05 17:57:45

标签: ios autolayout

我试图找出应该在导航栏下面放置视图的约束条件。问题是它的高度取决于当前的方向(纵向为44,横向为32),因此我无法使用确切的数字。

portrait landscape

我可以使用任何特殊值来约束吗?

3 个答案:

答案 0 :(得分:3)

Constraints

看到突出显示的顶部约束?这将允许您设置到相邻视图的固定距离。问题是您的导航栏可能位于嵌入视图的顶部,这意味着您需要取消选中“Under Top Bars”设置,然后您将能够为顶部布局管理器设置约束。

enter image description here

答案 1 :(得分:1)

这正是iOS 7提供Top Layout GuideBottom Layout Guide提供相对于他们的约束的正确原因。

答案 2 :(得分:0)

使用顶部和底部布局指南创建约束可能是正确的解决方案,但它们仅在故事板模式下可用。

如果他们不可用(或由于某种原因不能工作),解决方案如下:

  1. 创建相对于superview top的约束(此时实际值并不重要,我们将在代码中设置它。)
  2. 从步骤1创建约束出口(与查看方式相同)。
  3. 修改视图控制器代码:
  4.  
    - (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;
    }