首页 > 解决方案 > 表达式类型“NSLayoutConstraint”在没有更多上下文的情况下是模棱两可的

问题描述

当我尝试构建我的 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)
  }

标签: iosswiftpaging

解决方案


你最可能的罪魁祸首是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

推荐阅读