I wanted to simplify my problem, that's why I put the constraints in the subclass (class Container)
It is exactly the same if I put the constraints in the code of the ViewController
I think the problem is that Interface Builder doesn't apply constraints.
If I add the following method:
func setupIBConstraints() {
if (superview?.frame.size.width)! < (superview?.frame.size.height)! {
label.text = "setupIBConstraints(.CR \(superview?.frame.size.width)"
label.sizeToFit()
self.layer.frame = CGRect(x: 30, y: 100, width: (superview?.frame.size.width ?? 0)-60, height: (superview?.frame.size.height ?? 0)-300)
} else {
label.text = "setupIBConstraints(.CC ou .RC \(superview?.frame.size.width)"
label.sizeToFit()
self.layer.frame = CGRect(x: 20, y: 50, width: (superview?.frame.size.width ?? 0)-100, height: (superview?.frame.size.height ?? 0)-100)
}
}
and in method layoutSubviews() I replace setupConstraints(theOrientation) by
#if TARGET_INTERFACE_BUILDER
setupIBConstraints()
#else
setupConstraints(theOrientation)
#endif
I can see a correct result in Interface Builder
it proves that code is well executed by Interface Builder
change of frame is OK for IB but it doesn't apply constraints
I would reformulate my question: how to apply programmatic constraints in IB
Of course, I can write constraints in IB but I thought it was possible by program and see the results in IB
Topic:
Programming Languages
SubTopic:
Swift
Tags: