SnapKit更新约束导致冲突
SnapKit Updating Constraint causes conflict
我正在针对 iOS 12 SDK、Swift 4 和 SnapKit 4.2
构建一个 iOS 应用
我想在点击按钮时更新约束,但它会与以前版本的约束产生冲突。
这是我的代码:
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
。
我总是收到相同的错误消息。
我是不是配置有误?
不要在 updateViewConstraints
内放置约束,因为它会在多次调用时重新创建约束,因此请将代码设置在 viewDidLoad
内
我正在针对 iOS 12 SDK、Swift 4 和 SnapKit 4.2
构建一个 iOS 应用我想在点击按钮时更新约束,但它会与以前版本的约束产生冲突。
这是我的代码:
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
。
我总是收到相同的错误消息。
我是不是配置有误?
不要在 updateViewConstraints
内放置约束,因为它会在多次调用时重新创建约束,因此请将代码设置在 viewDidLoad