Невозможно интерпретировать '|' персонаж
Мне нужна ваша помощь, потому что я не понимаю, что происходит с моими автоматическими ограничениями. Ограничения моего переключателя приводят к сбою приложения. Когда я удаляю их, это работает хорошо. Это сообщение об ошибке, которое я получаю: Невозможно интерпретировать '|' символ, потому что связанный вид не имеет суперпредставления H:|-100-[v0(35)]|
спасибо за вашу помощь
Вот мой код:
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")
}
}
1 ответ
Обратите внимание на разницу между тем, как label
а также switchView
объявлены: label
инициализируется на выходе замыкания, которое выполняется при первом обращении к нему. switchView
является вычисляемым свойством с геттером, которое вызывается каждый раз, когда на него ссылаются, что означает, что версии, на которые вы ссылаетесь в -setupViews
не такие же, как тот, который вы назвали -addSubview
ранее. Так как они не принадлежат иерархии представления, визуальный формат недопустим.
Если вы сделаете декларацию switchView
соответствовать декларации label
, ваш код должен работать как положено:
var switchElement: UISwitch = { // note the equal operator here
let sL = UISwitch()
// ...
return sL
}() // note the invocation of the block here