2016-09-14 59 views
0

我需要你的幫助,因爲我不明白我的汽車約束會發生什麼。我的開關的限制使應用程序崩潰。當我刪除它,它很好地工作。 這是我得到的錯誤消息: 無法解釋'|'字符,因爲相關視圖沒有超視圖 H:| -100- [v0(35)] |無法解釋'|'字符

THX對您有所幫助

這裏是我的代碼:

class selectionCustomCell: UITableViewCell{ 
    var label: UILabel = { 
     let attribution = UILabel() 
     attribution.text = "Nom du label" 
     attribution.textColor = UIColor(r: 0, g: 185, b: 255) 
     attribution.lineBreakMode = NSLineBreakMode.ByWordWrapping 
     attribution.numberOfLines = 0 
     attribution.translatesAutoresizingMaskIntoConstraints = false 
     return attribution 
    }() 

    var switchElement: UISwitch{ 
     let sL = UISwitch() 
     sL.setOn(true, animated: true) 
     sL.onTintColor = UIColor(r: 0, g: 185, b: 255) 
     sL.tintColor = UIColor(r: 0, g: 185, b: 255) 
     sL.translatesAutoresizingMaskIntoConstraints = false 
     return sL 
    } 

    override init(style: UITableViewCellStyle, reuseIdentifier: String?) { 
     super.init(style: .Default, reuseIdentifier: reuseIdentifier) 
     addSubview(switchElement) 
     addSubview(label) 
     setupViews() 
    } 

    func setupViews(){ 
     addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-20-[v0]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": label]))   
     addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-20-[v0]", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": label])) 


     addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("H:|-100-[v0(35)]|", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": switchElement])) 


     addConstraints(NSLayoutConstraint.constraintsWithVisualFormat("V:|-20-[v0(35)]", options: NSLayoutFormatOptions(), metrics: nil, views: ["v0": switchElement])) 


    } 

    required init?(coder aDecoder: NSCoder) { 
     fatalError("init(coder:) has not been implemented") 
    } 

} 

回答

6

注之間如何labelswitchView聲明的區別:label被初始化爲一個封閉的輸出,其執行第一它被引用的時間。 switchView是一個計算屬性,每次引用時都會調用getter,這意味着您在-setupViews中引用的版本與之前稱爲-addSubview的版本不同。由於它們不屬於視圖層次結構,因此視覺格式無效。

如果您的switchView申報label的聲明相匹配,你的代碼應該按預期工作:

var switchElement: UISwitch = { // note the equal operator here 
    let sL = UISwitch() 
    // ... 
    return sL 
}() // note the invocation of the block here 
+0

THX你了。有用 !!!我正在拉我的頭髮 –