I ont une classe ViewController
qui a une variable textField
, qui est configuré lorsqu'il est défini dans le procédé de la viewDidLoad
ViewController
.contraintes Mise à jour autolayout selon l'orientation
class ViewController: UIViewController {
weak var textField: UITextField! {
didSet {
textField.delegate = self
textField.placeholder = "Enter Text"
view.addSubview(textField)
view.addConstraint(NSLayoutConstraint(item: textField, attribute: .Width, relatedBy: .Equal, toItem: view, attribute: .Width, multiplier: 0.80, constant: 0))
view.addConstraint(NSLayoutConstraint(item: textField, attribute: .Height, relatedBy: .Equal, toItem: view, attribute: .Height, multiplier: 0.05, constant: 0))
view.addConstraint(NSLayoutConstraint(item: textField, attribute: .CenterX, relatedBy: .Equal, toItem: view, attribute: .CenterX, multiplier: 1, constant: 0))
view.addConstraint(NSLayoutConstraint(item: textField, attribute: .CenterY, relatedBy: .Equal, toItem: view, attribute: .CenterY, multiplier: 1, constant: 0))
}
}
override func viewDidLoad() {
super.viewDidLoad()
textField = UITextField()
}
}
Un ensemble de contraintes de mise en page automatique est ajouté à la vue. Je veux que ce champ de texte soit centré au milieu (.CenterX
et .CenterY
), à 80% (5%) de la largeur (hauteur) de view
calculée en mode portrait du ViewController
.
Si l'orientation du dispositif (UIDevice.currentDevice().orientation
) est tourné dans orientation paysage, ou présenté d'une orientation paysage, je veux la largeur (hauteur) reste la même que pour l'orientation portrait.
Modification du attribute
pour le toItem
dans:
view.addConstraint(NSLayoutConstraint(item: textField, attribute: .Height, relatedBy: .Equal, toItem: view, attribute: .Height, multiplier: 0.05, constant: 0))
à:
attribute: (UIDeviceOrientationIsPortrait(UIDevice.currentDevice().orientation) ? .Height : .Width)
Ne pas faire l'affaire comme je suppose que le textField
ne reçoit pas (re) définir quand le dispositif bascule l'orientation. En outre, cette vérification semble un peu grumeleuse pour Swift. Est-ce que je manque un truc avec autolayout?
Bon endroit - merci. – Alex
@Alex Votre bienvenue, Si vous voulez plus de façon facile de gérer la contrainte par programme alors jetez un oeil -https: //github.com/keshavvishwkarma/KVConstraintExtensionsMaster –
Je ne suis toujours pas sûr si la spécification des contraintes dans un pourcentage relatif est un facteur meilleure approche? Par conséquent, vos sous-vues sont indépendantes du modèle iPhone, par exemple. Je suppose que c'est similaire à CSS. Des pensées à ce sujet? Merci. – Alex