表达式类型“ NSLayoutConstraint”在没有更多上下文的情况下是模棱两可的

时间:2019-10-16 16:33:06

标签: ios swift paging

当我尝试构建iOS应用程序时收到以下错误。我怎么知道是什么原因造成的?

  

错误:表达式类型'NSLayoutConstraint'不明确,没有更多上下文

代码:

private func centerIndicator() {
    let xCenterConstraint = NSLayoutConstraint(
        item: loadingView ?? default value, attribute: .centerX, relatedBy: .equal,
      toItem: indicator, attribute: .centerX, multiplier: 1, constant: 0
    )
    loadingView.addConstraint(xCenterConstraint)

    let yCenterConstraint = NSLayoutConstraint(
      item: loadingView, attribute: .centerY, relatedBy: .equal,
      toItem: indicator, attribute: .centerY, multiplier: 1, constant: 0
    )
    loadingView.addConstraint(yCenterConstraint)
  }

1 个答案:

答案 0 :(得分:1)

您最可能的罪魁祸首是default value,它不应该在那里。如果loadingView是非可选的,则可以删除?? default value。如果是可选的,则可能应该将其包装在if let loadingView = loadingView块中。在随机视图上设置约束不会奏效。

接下来,Apple不建议再直接向视图添加约束。而是使用isActive属性。

NSLayoutConstraint(
      item: loadingView, attribute: .centerY, relatedBy: .equal,
      toItem: indicator, attribute: .centerY, multiplier: 1, constant: 0
).isActive = true

但是这些都是非常简单的约束。更好的方法是改用布局锚。

loadingView.centerYAnchor.constraint(equalTo: indicator.centerYAnchor).isActive = true