Ограничение обновления SnapKit вызывает конфликт
Я создаю приложение для iOS на iOS 12 SDK, Swift 4 и SnapKit 4.2
Я хочу обновить ограничение, когда я нажимаю кнопку, но это создает конфликт с предыдущей версией ограничения.
Вот мой код:
private var menuConstraint: Constraint?
override func updateViewConstraints() {
super.updateViewConstraints()
menuVc.view.snp.makeConstraints { (make) in
self.menuConstraint = make.top.equalTo(view.snp.top).constraint
make.right.equalTo(view.snp.right)
make.width.equalTo(100)
make.height.equalTo(100)
}
}
@objc func onMenuTap() {
self.menuConstraint!.update(offset: 100)
}
когда onMenuTap
называется я получаю следующую ошибку:
[LayoutConstraints] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want.
Try this:
(1) look at each constraint and try to figure out which you don't expect;
(2) find the code that added the unwanted constraint or constraints and fix it.
(
"<SnapKit.LayoutConstraint:0xABC@MyViewController.swift#77 UIView:0xDEF.top == UIView:0xGHI.top>",
"<SnapKit.LayoutConstraint:0xABC@MyViewController.swift#77 UIView:0xDEF.top == UIView:0xGHI.top + 100.0>"
)
Как видите, предыдущая версия верхнего ограничения (без смещения) конфликтует с новой версией. Это как если бы оно не обновляло существующее ограничение, а просто создавало новое.
Я пробовал несколько вариантов:
- оборачивая строку обновления в
snp.updateConstraints
закрытие - установка начального смещения при первом создании ограничения
- хватая основную
LayoutConstraint
и обновлениеconstant
непосредственно.
Я всегда получаю одно и то же сообщение об ошибке.
У меня что-то настроено неправильно?
1 ответ
Решение
Не ставьте ограничений внутри updateViewConstraints
так как он будет воссоздавать ограничения, как он вызывается несколько раз, поэтому установите код внутри viewDidLoad