首页 > 解决方案 > 使用 NSLayoutConstraint 时导致编译错误

问题描述

当我使用 NSLayoutConstraint 时,我的代码没有编译。我正在尝试使用代码而不是使用情节提要来做所有事情。我不知道这是否正在发生,因为我错过了一些东西,但我现在想不出为什么这不起作用。错误发生在judo = line.

我收到错误消息:

无法将类型“[()]”的值分配给类型“[NSLayout”

对于judo = []部分。

import UIKit

class ViewController: UIViewController {
    var Judo1 = [NSLayoutConstraint]()
    let FIRE = UIImageView()

    override func viewDidLoad() {
        super.viewDidLoad()

        view.addSubview(FIRE)
        FIRE.translatesAutoresizingMaskIntoConstraints = false
        let leadingc2 = FIRE.topAnchor.constraint(equalTo: view.topAnchor, constant: 0).isActive = true
        let trailingC2 =  FIRE.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0).isActive = true
        let topc2 =
            FIRE.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0).isActive = true
        let bottomc2 =   FIRE.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0).isActive = true

        Judo1 = [leadingc2,trailingC2,topc2,bottomc2]

        NSLayoutConstraint.activate(Judo1)
    }
}

标签: iosswiftcompiler-errorsnslayoutconstraint

解决方案


当你追加

 .active = true

没有约束返回,所以让它们没有.active = true,因为在这种情况下返回是无效的

FIRE.translatesAutoresizingMaskIntoConstraints = false
let leadingc2 = FIRE.topAnchor.constraint(equalTo: view.topAnchor, constant: 0)
let trailingC2 =  FIRE.bottomAnchor.constraint(equalTo: view.bottomAnchor, constant: 0)
let topc2 =   FIRE.leadingAnchor.constraint(equalTo: view.leadingAnchor, constant: 0)
let bottomc2 = FIRE.trailingAnchor.constraint(equalTo: view.trailingAnchor, constant: 0)  
judo1 = [leadingc2,trailingC2,topc2,bottomc2] 
NSLayoutConstraint.activate(judo1)

使用苹果推荐的更好方法(如果您不需要参考)

NSLayoutConstraint.activate ([

   FIRE.topAnchor.constraint(equalTo: view.topAnchor),
   FIRE.bottomAnchor.constraint(equalTo: view.bottomAnchor),
   FIRE.leadingAnchor.constraint(equalTo: view.leadingAnchor),
   FIRE.trailingAnchor.constraint(equalTo: view.trailingAnchor)

 ])

同样当常数为零时,摆脱它


推荐阅读