代码中设置的Autolayout约束未出现在界面构建器中

时间:2016-03-22 23:14:34

标签: swift uiview autolayout nslayoutconstraint

我有一个在界面构建器中设置的自定义视图,具有顶部,前导,尾随,高度约束。

在我的自定义视图中,我有一个标题和一个按钮。 我试图将标题添加到bottom和centerY约束。 以及按钮宽度,高度,底部,前导约束。

当我添加任何约束时,我在界面构建器中收到警告:

  

预期:宽度= 600,身高= 68。

     

实际:宽度= 0,高度= 0

当我运行代码时,一切正常,但我无法在界面构建器中看到任何内容。

代码:

@IBDesignable
class UIHeader: UIView {

var delegate: HeaderDelegate?

private lazy var titleLable: UILabel = {
    let lbl = UILabel()
    lbl.translatesAutoresizingMaskIntoConstraints = false
    lbl.font = UIFont(name: "Lato-Light", size: 16)
    lbl.text = "Title"
    return lbl
}()

private lazy var backButton: UIButton = {
    let btn = UIButton()
    btn.tintColor = UIColor.lightGrayColor()
    btn.translatesAutoresizingMaskIntoConstraints = false

    let image = UIImage(named: "prev")
    if let image = image {
        btn.setImage(image.imageWithRenderingMode(.AlwaysTemplate), forState: .Normal)
    }
    btn.addTarget(self, action: #selector(UIHeader.OnBackButtonClickLister(_:)), forControlEvents: .TouchUpInside)
    return btn
}()

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

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

extension UIHeader {

@IBInspectable
var backButtonImage: UIImage? {
    get {
        return backButton.imageForState(.Normal)
    }
    set (newImage) {
        backButton.setImage(newImage?.imageWithRenderingMode(.AlwaysTemplate), forState: .Normal)
    }
}

@IBInspectable
var title: String? {
    get {
        return titleLable.text
    }
    set (newTitle) {
        titleLable.text = newTitle
    }
}
}

extension UIHeader {
private func setupView() {
    backgroundColor = UIColor.whiteColor()
    translatesAutoresizingMaskIntoConstraints = false
    addSubview(titleLable)
    addSubview(backButton)

    //add shadow
    layer.shadowColor = UIColor(white: 115/255, alpha: 1.0).CGColor
    layer.shadowOpacity = 0.5
    layer.shadowRadius = 8
    layer.shadowOffset = CGSizeMake(0, -1)

    NSLayoutConstraint.activateConstraints([
        //Title//
        //center x
        NSLayoutConstraint(item: titleLable, attribute: .CenterX, relatedBy: .Equal, toItem: self, attribute: .CenterX, multiplier: 1.0, constant: 0),
        //bottom
        NSLayoutConstraint(item: self, attribute: .Bottom, relatedBy: .Equal, toItem: titleLable, attribute: .Bottom, multiplier: 1, constant: 12),

        //button//
        //bottom
        NSLayoutConstraint(item: self, attribute: .Bottom, relatedBy: .Equal, toItem: backButton, attribute: .Bottom, multiplier: 1, constant: 4),

        //leading
        NSLayoutConstraint(item: backButton, attribute: .Leading, relatedBy: .Equal, toItem: self, attribute: .Leading, multiplier: 1, constant: 0),

        //width
        NSLayoutConstraint(item: backButton, attribute: .Width, relatedBy: .Equal, toItem: nil, attribute: .Width, multiplier: 1, constant: 40),

        //height
        NSLayoutConstraint(item: backButton, attribute: .Height, relatedBy: .Equal, toItem: nil, attribute: .Height, multiplier: 1, constant: 40)
        ])
}
}

我还尝试添加约束:

addConstraint(NSLayoutConstraint)

无法弄清问题是什么。

由于

1 个答案:

答案 0 :(得分:0)

我删除了

    translatesAutoresizingMaskIntoConstraints = false

一切都很好。