Быстрое расстояние между конечными ограничениями в зависимости от ширины суперпредставления, умноженного на значение (программно) - PullRequest
0 голосов
/ 04 февраля 2020

Допустим, у меня есть UITableViewCell.

В contentView ячейки у меня есть подпункт. Трейлинг подпредставления к contentView зависит от ширины contentView, умноженной на значение.

Я пытаюсь достичь:

let trailingSpacing: CGFloat = contentView.frame.size.width * 0.2
subView.trailingAnchor.constraint(equalTo: contentView.trailingAnchor, constant: -trailingSpacing).isActive = true

Часть кода выше - это то, что я пытался сделать в layoutSubviews() из UITableViewCell. Это не работает и, кроме того, он не чувствует себя хорошо. Есть ли более чистый способ сделать это? Я не думаю, что вы можете сделать это в одном ограничении, но, возможно, я ошибаюсь.

Все ограничения сделаны в коде, раскадровки / xib / nib нет.

Спасибо заранее!

1 Ответ

1 голос
/ 04 февраля 2020

Я не уверен, что вы можете решить это с помощью одного ограничения, но вы можете добавить вид распорки для решения этой проблемы. Прикрепите вид спейсера к задней части вашего контейнера, а трейлинг вашего "целевого" вида к началу спейсера. Затем дайте проставке ширину, кратную ширине контейнера:

let constraint = NSLayoutConstraint(
    item: spacer,
    attribute: .width,
    relatedBy: .equal,
    toItem: container,
    attribute: .width,
    multiplier: 0.2, // <-- tweak this
    constant: 0
)
container.addConstraint(constraint)

(Вам может понадобиться переключить space и container в ограничении, я всегда забываю, какой из них множитель применяется к.)

Вы даже можете сделать это решение в Интерфейсном Разработчике.

...