Ошибка компиляции при использовании NSLayoutConstraint - PullRequest
0 голосов
/ 07 января 2019

Мой код не компилируется, когда я использую NSLayoutConstraint. Я пытаюсь сделать все с помощью кода, а не с помощью раскадровки. Я не знаю, происходит ли это, потому что я что-то упустил, но сейчас я не могу понять, почему это не работает. Ошибка возникает в функции viewDidLoad в 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)
    }
}

1 Ответ

0 голосов
/ 07 января 2019

При добавлении

 .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)

 ])

Также, когда константа равна нулю, избавьтесь от нее

...