Ограничение обновления SnapKit вызывает конфликт - PullRequest
0 голосов
/ 25 ноября 2018

Я создаю приложение 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 Ответ

0 голосов
/ 25 ноября 2018

Не помещайте ограничения внутри updateViewConstraints, так как он воссоздает ограничения, так как он вызывается несколько раз, поэтому установите код внутри viewDidLoad

...