L'ajout d'une sous-vue et la position avec les contraintes par programmation
J'ai ajouté un UIView
à l'aide de l'IB à la vue-contrôleur. Appelons ça le redView
.
Puis j'ai épinglé ses quatre côtés à l'aide de l'auto contraintes de mise en forme dans le code et quand je le lance, il ressemble à ceci comme prévu.
Maintenant, je veux ajouter un UILabel
de ce point de vue par programme et placez-le au centre de l'utilisation de l'auto contraintes de mise en forme.
Ci-dessous le code que j'ai jusqu'ici.
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 que je suis en manque ici?
Merci.
Vous devez vous connecter pour publier un commentaire.
Je suis sûr que vous devez également définir:
Sinon, je ne pense pas que les contraintes qui s'appliquent à l'étiquette.
redView
'ssetTranslatesAutoresizingMaskIntoConstraints
ligne en commentaire, mais cela n'a pas affecté la vue, donc j'ai pensé que cette ligne n'était pas obligatoire. Je suppose que c'est pour les vues vous créer par programmation. Merci.Note pour Swift 2/3
Il a changé de propriété Booléenne: UIView.translatesAutoresizingMaskIntoConstraints
Au lieu de cela auparavant:
Il est maintenant:
Vous besoin de faire cela pour chaque UIControl à attribuer NSConstraints