首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >SnapKit更新约束引起冲突

SnapKit更新约束引起冲突
EN

Stack Overflow用户
提问于 2018-11-25 17:50:38
回答 1查看 1.8K关注 0票数 0

我正在使用iOS 12 SDK、Swift 4和SnapKit 4.2构建一个iOS应用程序

当我点击一个按钮时,我想要更新一个约束,但是它会创建一个与以前版本的约束相冲突的约束。

这是我的密码:

代码语言:javascript
复制
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时,我得到以下错误:

代码语言:javascript
复制
[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>"
)

如您所见,top约束的前一个版本(没有偏移量)与新版本相冲突。就好像它没有更新现有的约束,而只是创建了一个新的约束。

我试过几种变体:

  • 将更新行包装在snp.updateConstraints闭包中
  • 第一次创建约束时设置初始偏移量
  • 获取底层LayoutConstraint并直接更新constant

我总是收到同样的错误信息。

我有配置错误的东西吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-11-25 18:09:11

不要在updateViewConstraints中放置约束,因为它会多次重新创建约束,因此在viewDidLoad中设置代码

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53470239

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档