2016-03-22 23 views
0

Üst, ön, arka, yükseklik kısıtlamaları olan arayüz oluşturucuda ayarlanmış özel bir görünümüm var.Otomatik oluşturucu kısıtlamaları, arayüz oluşturucuda görünmüyor kodda ayarlanmış

Özel görünümümde bir başlığa ve bir düğmem var. Başlığa alt ve ortaY kısıtlamaları eklemeye çalışıyorum. ve düğme genişliği, yükseklik, alt, önde gelen kısıtlamalar.

i herhangi bir kısıtlama eklerken arayüz oluşturucu bir uyarı alır:

Beklenen: genişlik = 600, yükseklik = 68.

Fiili: genişlik = 0, height =

i her şey çalışıyor kod çalıştırmasına, ama arayüz oluşturucudaki şey göremiyorum 0.

kodu: Sorunun ne olduğunu çözemiyorum

addConstraint(NSLayoutConstraint) 

: Ben de olan kısıtlamaları eklemeye çalıştı

@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) 
     ]) 
} 
} 

.

Teşekkür

+0

Sorun, düzen oluşmadan önce 'init'de bunu yapmaya çalıştığınız bence sorun. – Michael

+0

@Michael, ne demek istiyorsun? Bunu nerede yapıyorum? – ilan

+0

“Init” iniz, henüz düzen olmadığından henüz ayarlanmamış mevcut UI özniteliklerine bağlı olan yeni kısıtlamalar oluşturmak için setupView() işlevini çağırır. Şüpheliyim ki, bu uyarıların kaynağı. Uyarının gidip gitmediğini görmek için, 'layoutSubviews' yerine çağrı yapmayı deneyebilirsiniz. – Michael

cevap

0

Ben

translatesAutoresizingMaskIntoConstraints = false 

kaldırıldı ve her şey iyi çalışıyor.