«Невозможно установить ограничение», причина: «Нет общего супервизора между представлениями

import UIKit
import SnapKit

class RecordButton: UIView {
     let box = UIView()
     let container = UIView()

    required init?(coder aDecoder: NSCoder) {
        super.init(coder: aDecoder)
        setup()
    }

    override init(frame: CGRect) {
        super.init(frame: frame)
        setup()
    }

    func setup() {
         container.snp_makeConstraints { (make) -> Void in
         make.width.equalTo(200)
         make.height.equalTo(200)
         make.center.equalTo(self.container)
         }
    box.snp_makeConstraints { (make) -> Void in
        make.top.equalTo(container).offset(50)
        make.left.equalTo(container).offset(50)
        make.bottom.equalTo(container).offset(-50)
        make.right.equalTo(container).offset(-50)
        make.center.equalTo(container)
    }
    self.addSubview(container)
    container.addSubview(box)
    setColor()

    }
    func setColor() {
         self.container.backgroundColor = UIColor.blackColor()
         self.box.backgroundColor = UIColor.orangeColor()
    }

}

Почему показывает эту ошибку? Есть ли другой способ выполнить это? Любое предложение?. center.equalTo создает эту ошибку. Я новичок в Swift и пытаюсь внедрить фреймворк SnapKit.


person Milap Jhumkhawala    schedule 15.07.2016    source источник
comment
попробуйте добавить представления перед установкой на них ограничений (переместите блок sip_makeConstraints после добавления представлений)   -  person pbodsk    schedule 15.07.2016


Ответы (1)


Это означает, что ваши представления или любой контроллер должны быть в общем представлении. Например, есть представление A с двумя кнопками, например X и Y, и представление B с двумя кнопками P и K, тогда вы можете установить ограничение P и K в отношении его суперпредставления B, а не в отношении представления A.

Если существует несколько суперпредставлений, убедитесь, что вы указали правильное ограничение для каждого суперпредставления. тогда будут удовлетворены только ограничения представления конечной точки.

Дата:

Сначала добавьте поле в контейнер и контейнер в его супервизор, затем установите ограничения. и убедитесь, что вы получаете центр в self.container и container для container view и box view соответственно. Если вы устанавливаете top,bottom,leading and trailing, тогда не нужно также устанавливать центр!

Надеюсь, это поможет :)

person Ketan Parmar    schedule 15.07.2016
comment
Я знаю, что веду себя глупо, но можете ли вы объяснить это в отношении моего кода? Это было бы прекрасно. - person Milap Jhumkhawala; 15.07.2016
comment
Понятно! Большое спасибо:) - person Milap Jhumkhawala; 15.07.2016