2016-02-24 34 views
0

好吧,我是Swift编程语言和IOS平台的新手,但是我在其他平台(如Android/WP/Xamarin)的移动开发方面有很强的背景,所以我决定只是潜入并从自动布局开始学习布局系统。为什么这个视图在垂直轴对齐时水平居中

这里我试图水平放置一个视图,并使用自动布局API通过PureLayout将其与屏幕底部对齐。当我将视图设置为与它的超视图的水平轴对齐时,这就是我得到的结果。

代码

override func updateViewConstraints() { 
    if(!didSetupConstraints) 
    { 

     blackView.autoPinToBottomLayoutGuideOfViewController(self, withInset: 10) 
     blackView.autoSetDimensionsToSize(CGSize(width:50,height: 50)) 
     blackView.autoAlignAxisToSuperviewAxis(.Horizontal) 


     didSetupConstraints=true 
    } 

    super.updateViewConstraints() 
    } 

结果

enter image description here

然而当我设置对齐于垂直轴我得到所需的最终结果

代码的视图

override func updateViewConstraints() { 
    if(!didSetupConstraints) 
    { 

     blackView.autoPinToBottomLayoutGuideOfViewController(self, withInset: 10) 
     blackView.autoSetDimensionsToSize(CGSize(width:50,height: 50)) 
     blackView.autoAlignAxisToSuperviewAxis(.Vertical) 


     didSetupConstraints=true 
    } 

    super.updateViewConstraints() 
    } 

结果

enter image description here

即使我得到了我想要的,我没有感觉良好,没有正确理解为什么它得到了在中心设置水平排列的出发结果该视图与超视图的垂直轴对齐。所以有人可以向我解释对齐轴的整个概念以及它们在自动布局中的工作方式。提前致谢。

回答

1

水平居中并对齐到垂直轴是一回事。

纵轴是一个假想的垂直线,位于视图左右边缘之间的中心。所以如果一个视图与它对齐,视图将被定位在沿着该垂直线的任何位置,导致视图被水平输入。

Pure Layout的源代码还有一个定义,并显示它们如何映射到常规自动布局(如果有帮助)。

/** A vertical line equidistant from the view's left and right edges. */ 
ALAxisVertical = NSLayoutAttributeCenterX, 
/** A horizontal line equidistant from the view's top and bottom edges. */ 
ALAxisHorizontal = NSLayoutAttributeCenterY, 
+0

好吧,我还没有检查源,但我想知道是否这是它映射到。非常感谢解释! –