Добавление отрицательных ограничений программно - PullRequest
0 голосов
/ 07 сентября 2018

Почему я должен присваивать отрицательное значение моему ограничению 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
}

Ответы [ 2 ]

0 голосов
/ 07 сентября 2018

Я считаю, что это связано с сеткой (X, Y) окна.

Вы привязываете свой titleLabel rightAnchor к представлению rightAnchor. Однако, если «вы постоянны, это 28, вы ограничиваете эту привязку 28 точками вдоль оси x, таким образом, перемещая вашу метку из рамки представления.

Если вы добавляете эти ограничения программно, вы должны указать константу как отрицательную, если хотите переместить ее влево вдоль оси x.

0 голосов
/ 07 сентября 2018

Потому что в соответствии с этим

titlelbl.right = view.right - 28

это то же самое, что и сказать

view.right = titlelbl.right + 28

firstItem.anchor = secondfItem.anchor * множитель +/- константа

преобразован в

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

ИЛИ

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

, если вам не нравятся отрицательные значения

Редактировать:

Значение ограничения, когда оно -28

Вы говорите auto-layout, чтобы значение max x в titlelbl было равно значению max x в представлении минус28

|- фунт + 28 - |

, но с + 28

|- фунт - |+ 28 <<< вне поля зрения макс. Х </p>

...