Как преобразовать toItem или Item ограничений из viewA в viewB?Я получаю эту ошибку: неизвестный атрибут макета - PullRequest
0 голосов
/ 27 марта 2019

В качестве заголовка у меня есть viewParent, у которого есть viewA, но viewA будет заменен на viewB в методе awakeAfter.

Я хочу преобразовать все ограничения

из viewParent <-> viewA,

to viewParent <-> viewB.

Большое спасибо.

Вот мой код:

private func convertConstraints(from: UIView, to: UIView){
        from.constraints.forEach { (constraint: NSLayoutConstraint) in
            let isFirst = (constraint.firstItem as? UIView) == from
            let isSecond = (constraint.secondItem as? UIView) == from

            let first: Any = (isFirst) ? to : constraint.firstItem as Any
            let second: Any? = (isSecond) ? to : constraint.secondItem as? Any

            let new = NSLayoutConstraint(item: first,
                               attribute: constraint.firstAttribute,
                               relatedBy: constraint.relation,
                               toItem: second,
                               attribute: constraint.secondAttribute,
                               multiplier: constraint.multiplier,
                               constant: constraint.constant)
            new.priority = constraint.priority
            new.identifier = constraint.identifier
            new.shouldBeArchived = constraint.shouldBeArchived
            new.isActive = constraint.isActive
        }
    }

А консольный журнал ниже:

2019-03-27 15:36:33.740004+0800 Cale[86571:50392102] *** Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: 'NSLayoutConstraint for <Cale.AirportButton: 0x7f9eb454d990; baseClass = UIButton; frame = (0 129; 120 120); autoresize = RM+BM; layer = <CALayer: 0x600003936460>>: Unknown layout attribute'
*** First throw call stack:
(
    0   CoreFoundation                      0x000000010bf501bb __exceptionPreprocess + 331
    1   libobjc.A.dylib                     0x000000010b4ee735 objc_exception_throw + 48
    2   CoreFoundation                      0x000000010bf50015 +[NSException raise:format:] + 197
    3   Foundation                          0x000000010a16cf61 ResolveConstraintArguments + 372
    4   Foundation                          0x000000010a16d2cb +[NSLayoutConstraint constraintWithItem:attribute:relatedBy:toItem:attribute:multiplier:constant:] + 80
.
.
.

1 Ответ

1 голос
/ 27 марта 2019

Я исправил это, ... большое спасибо.

Я изменил код с:

let second: Any? = (isSecond) ? to : constraint.secondItem as? Any

до:

let second: Any? = (isSecond) ? to : constraint.secondItem
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...