web-dev-qa-db-fra.com

Comment déplacer un UIView par programme dans Swift

Le problème est de déplacer un "InfoView" (UIView) par programme dans Swift.

Les contraintes suivantes existent dans le storyboard (voir image):

enter image description here

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!

11
iKK

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.

24
Darren Findlay

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  )
10
Patrick Lynch

Swift 4

UIView.animateKeyframes(withDuration: 0.25, delay: 0.0, options: UIViewKeyframeAnimationOptions(rawValue: 7), animations: {
       self.infoTextLabelView.frame.Origin.y+=200

},completion: nil)
8
ZAFAR007