J'ai ajouté un UIView
en utilisant l'IB sur le contrôleur de vue. Appelons cela le redView
.
Ensuite, j'ai épinglé ses quatre côtés en utilisant des contraintes de mise en page automatique dans le code et lorsque je l'exécute, cela ressemble à cela comme prévu.
Maintenant, je veux ajouter un UILabel
à cette vue par programme et le positionner au centre en utilisant des contraintes de disposition automatique.
Voici le code que j'ai jusqu'à présent.
import UIKit
class ViewController: UIViewController {
@IBOutlet private var redView: UIView!
override func viewDidLoad() {
super.viewDidLoad()
redView.setTranslatesAutoresizingMaskIntoConstraints(false)
let leadingConstraint = NSLayoutConstraint(item: redView, attribute: .Leading, relatedBy: .Equal, toItem: view, attribute: .Leading, multiplier: 1, constant: 0)
let trailingConstraint = NSLayoutConstraint(item: redView, attribute: .Trailing, relatedBy: .Equal, toItem: view, attribute: .Trailing, multiplier: 1, constant: 0)
let topConstraint = NSLayoutConstraint(item: redView, attribute: .Top, relatedBy: .Equal, toItem: view, attribute: .Top, multiplier: 1, constant: 0)
let bottomConstraint = NSLayoutConstraint(item: redView, attribute: .Bottom, relatedBy: .Equal, toItem: view, attribute: .Bottom, multiplier: 1, constant: 0)
view.addConstraints([leadingConstraint, trailingConstraint, topConstraint, bottomConstraint])
let label = UILabel()
label.text = "Auto Layout Exercise"
redView.addSubview(label)
let xCenterConstraint = NSLayoutConstraint(item: label, attribute: .CenterX, relatedBy: .Equal, toItem: redView, attribute: .CenterX, multiplier: 1, constant: 0)
let yCenterConstraint = NSLayoutConstraint(item: label, attribute: .CenterY, relatedBy: .Equal, toItem: redView, attribute: .CenterY, multiplier: 1, constant: 0)
let leadingConstraint1 = NSLayoutConstraint(item: label, attribute: .Leading, relatedBy: .Equal, toItem: redView, attribute: .Leading, multiplier: 1, constant: 20)
let trailingConstraint1 = NSLayoutConstraint(item: label, attribute: .Trailing, relatedBy: .Equal, toItem: redView, attribute: .Trailing, multiplier: 1, constant: -20)
redView.addConstraints([xCenterConstraint, yCenterConstraint, leadingConstraint1, trailingConstraint1])
}
}
Le problème est que l'étiquette n'apparaît pas sur le redView
. Quelqu'un peut-il me dire ce qui me manque ici?
Je vous remercie.
Je suis sûr que vous devez également définir:
label.setTranslatesAutoresizingMaskIntoConstraints(false)
Sinon, je ne pense pas que les contraintes s'appliqueront à l'étiquette.
Remarque pour Swift 2/3
Elle a changé en propriété booléenne: IView.translatesAutoresizingMaskIntoConstraints
Au lieu d'être auparavant:
label.setTranslatesAutoresizingMaskIntoConstraints(false)
C'est maintenant:
label.translatesAutoresizingMaskIntoConstraints = false
Vous devez le faire pour chaque UIControl pour assigner NSConstraints
label.translatesAutoresizingMaskIntoConstraints = false