Le problème est de déplacer un "InfoView" (UIView) par programme dans Swift.
Les contraintes suivantes existent dans le storyboard (voir image):
Maintenant, je voudrais déplacer le "InfoView" dans "MyView" vers le haut ou vers le bas.
J'ai essayé:
@IBOutlet weak var infoTextLabel: UILabel!
@IBOutlet weak var infoTextLabelView: UIView!
// set infoTextLabel color
self.infoTextLabel.textColor = UIColor.blackColor()
// set infoTextLabel text
self.infoTextLabel.text = "hello"
// unhide infoTextLabel
self.infoTextLabel.hidden = false
// For the moving in Y-direction, I tried this - but does not work !!!!!!!
self.infoTextLabelView.frame.Origin.y += 200
Les contraintes Autolayout pourraient-elles jouer un rôle. Comment les surmonter par programme. Ou la méthode frame.Origin.y est-elle la mauvaise ??
Appréciez toute aide à ce sujet!
Lorsque vous utilisez des contraintes, vous ne souhaitez jamais définir directement le cadre d'une vue. Au lieu de cela, reconfigurez les contraintes et laissez le moteur de disposition automatique définir le cadre de votre vue pour vous. Créez un IBOutlet dans votre contrôleur de vue pour stocker une référence à votre "contrainte d'alignement Y central". Assurez-vous de le connecter dans votre storyboard ou xib.
@IBOutlet var yConstraint: NSLayoutConstraint
Ensuite, vous pouvez définir la propriété constante de la contrainte pour la décaler de la position Y (un nombre positif la fera descendre, une valeur négative la fera monter).
yConstraint.constant = 200
Cela déplacerait votre vue de 200 points vers le bas.
Voir ma réponse à cette autre question sur un bon moyen de déplacer par programme des vues à l'aide de la mise en page automatique: https://stackoverflow.com/a/30687856/3149796
En outre, selon l'effet recherché et d'autres exigences de votre interface utilisateur, vous pouvez également y parvenir avec des transformations sans perturber votre disposition automatique.
// Create a new transform
self.infoTextLabelView.transform = CGAffineTransformMakeTranslation( 0.0, 200.0 )
// Or modify existing transform
self.infoTextLabelView.transform = CGAffineTransformTranslate( self.infoTextLabelView.transform, 0.0, 200.0 )
Swift 4
UIView.animateKeyframes(withDuration: 0.25, delay: 0.0, options: UIViewKeyframeAnimationOptions(rawValue: 7), animations: {
self.infoTextLabelView.frame.Origin.y+=200
},completion: nil)