【问题标题】:Swift 4.0 cannot invoke initializer for type 'NSLayoutConstraint' with an argument list of type '(NSLayoutConstraint)'Swift 4.0 无法使用类型为“(NSLayoutConstraint)”的参数列表调用类型“NSLayoutConstraint”的初始化程序
【发布时间】:2017-09-22 18:45:13
【问题描述】:

我正在使用 XCode 版本 9.0 (9A235)、macOS Sierra 版本 10.12.6 (16G29)、iOS 11.0。

我需要将约束添加到数组中,然后我需要激活它。

我确实喜欢这样做......

// 1.Declare and initialized  the constraint

private lazy var labelConstraints = [NSLayoutConstraint]()

// 2.Prepare constraint   
let widthConstraint = 
    headerLabel.widthAnchor.constraint(equalTo: licenseLabel.widthAnchor)

// 3.Constraint added into the array   
labelConstraints.append(NSLayoutConstraint(widthConstraint))

// 4.Finally activate the constraints   
labelConstraints.activate()

在构建我的 xcode 项目后,它会引发类似

的错误
ERROR: **cannot invoke initializer for type 'NSLayoutConstraint' with an argument list of type '(NSLayoutConstraint)'** 

**labelConstraints.append(NSLayoutConstraint(widthConstraint))**

【问题讨论】:

  • 请尝试更好地格式化您的问题。不要以- 开头,因为这会使stackoverflow 将其视为列表项。将代码 sn-ps 缩进额外的四个空格。这次我给你修好了。

标签: ios ios11 swift4 xcode9


【解决方案1】:

你的第一个问题在这里:

labelConstraints.append(NSLayoutConstraint(widthConstraint))

您的widthConstraint 变量已经是NSLayoutConstraint,因此您无需尝试将其转换为NSLayoutConstraint。只需这样做:

labelConstraints.append(widthConstraint)

你的第二个问题在这里:

labelConstraints.activate()

类型Array 没有activate 方法。您可以像这样激活labelConstraints 中的所有约束:

NSLayoutConstraint.activate(labelConstraints)

【讨论】:

  • 谢谢@rob mayoff。现在我成功地添加到数组中并记录了 labelConstraints.count 它 reurns 一些 X 值。但它使我的项目崩溃并出现控制台错误,例如:*** 由于未捕获的异常“NSInvalidArgumentException”而终止应用程序,原因:“-[NSConcreteMapTable nsli_superitem]:无法识别的选择器发送到实例 0x7fe4b44ecf00”
  • 您必须编辑您的问题以包含更多详细信息。
  • 谢谢@rob mayoff。它现在工作。其实上面的错误与这个无关,是另一个。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2020-12-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多