为什么这个视图在与垂直轴对齐时水平居中

Why is this view centered horizontally when its aligned to a vertical axis

好的,所以我是 Swift 编程语言和 IOS 平台的新手,但是我在 Android/WP/Xamarin 等其他平台上的移动开发方面有很强的背景,所以我决定只从自动布局开始深入学习布局系统。

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

代码

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

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


        didSetupConstraints=true
    }

    super.updateViewConstraints()
   }

结果

然而,当我将视图设置为与垂直轴对齐时,我得到了想要的最终结果

代码

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

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


        didSetupConstraints=true
    }

    super.updateViewConstraints()
   }

结果

尽管我得到了我想要的结果,但如果没有正确理解为什么它通过将视图设置为与其父视图的垂直轴对齐而水平居中对齐,我对继续进行感觉不太好。那么有人可以向我解释对齐轴的整个概念以及它们在自动布局中的工作方式。提前致谢。

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

垂直轴是一条假想的垂直线,位于视图左右边缘之间。因此,如果视图与其对齐,则视图将位于垂直线上的任何位置,从而导致视图水平进入。

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,