2

为什么我必须给我的rigthAnchor约束一个负值才能titleLabel从视图的右侧留出 28 个边距。如果我只是给它正值,它会超出视图 28 个像素。

private func setupLayout() {
    view.addSubview(imageView)
    view.addSubview(titleLabel)

    // *** imageView ***
    if #available(iOS 11.0, *) {
        imageView.topAnchor.constraint(equalTo: view.safeAreaLayoutGuide.topAnchor, constant: 116).isActive = true
    } else {
        imageView.topAnchor.constraint(equalTo: view.topAnchor, constant: 116).isActive = true
    }
    imageView.rightAnchor.constraint(equalTo: view.rightAnchor).isActive = true
    imageView.leftAnchor.constraint(equalTo: view.leftAnchor).isActive = true
    imageView.heightAnchor.constraint(equalToConstant: 224).isActive = true

    // *** titleLabel ***
    titleLabel.topAnchor.constraint(equalTo: imageView.bottomAnchor, constant: 25).isActive = true
    titleLabel.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -28).isActive = true
    titleLabel.leftAnchor.constraint(equalTo: view.leftAnchor, constant: 28).isActive = true
}
4

2 回答 2

7

因为按照这个

titlelbl.right = view.right - 28

和说的一样

view.right = titlelbl.right + 28

firstItem.anchor = seconfItem.anchor * 乘数 +/- 常数

转变为

titleLabel.rightAnchor.constraint(equalTo: view.rightAnchor, constant: -28).isActive = true

或者

view.rightAnchor.constraint(equalTo: titleLabel.rightAnchor, constant: 28).isActive = true

如果你不喜欢负值

编辑:

-28 时约束的含义

您正在告诉自动布局将 titlelbl 的最大 x 值设置为等于视图的最大 x 值减去 28

| - 磅 + 28 - |

但是+28

| - lbl - | + 28 <<< 视野外最大 x

于 2018-09-07T17:40:02.257 回答
2

我相信它与窗口的(X,Y)网格有关。

您将 titleLabel 的 rightAnchor 锚定到视图的 rightAnchor。但是,如果'您保持不变是 28,您将约束该锚点 28 点沿 x 轴,从而将您的标签移出视图框架。

如果您以编程方式添加这些约束,则必须将常量指定为负数,如果您想将其沿 x 轴向左移动。

于 2018-09-07T17:46:39.223 回答