0

J'ai implémenté une vue de pile remplie proportionnellement avec des images et des étiquettes et du texte et des boutons à l'intérieur d'un survol sur mon contrôleur principal. Quand je saisis le popover que j'utilise, la vue apparaîtra comme prioritaire pour définir le rayon d'angle de l'image que j'appelle ProfileImage à 1/2 de sa hauteur pour qu'il apparaisse comme un cercle.Comment utiliser les attributs de sous-vues dans StackView configurés pour remplir proportionnellement comme recalculer après rotation du périphérique

Lorsque je fais pivoter le périphérique, la pile recalcule et modifie la taille de l'image profile. J'ai essayé d'utiliser le code ci-dessous pour ajuster le rayon de l'angle de sorte qu'il s'agisse d'un cercle lorsque la vue transite. J'ai essayé ce code à la fois dans le bloc d'achèvement et dans le bloc à côté de la transition.

Lorsque je fais pivoter l'appareil, le rayon d'angle est défini par la taille de l'image dans l'orientation OLD, et non dans l'orientation NEW. Il semble que la transition vers une nouvelle orientation se produise et ALORS la pile se recalcule. Le rayon du coin semble se mettre à jour avant que cela n'arrive. Je voudrais savoir comment appeler la propriété height de l'image qui sera la hauteur dans la nouvelle vue après que l'appareil a pivoté et que la pile recalcule la taille de l'image en fonction de cette nouvelle orientation.

Nous vous remercions de vos conseils. S'il vous plaît voir ci-dessous pour le code en question:

override func viewWillTransition(to size: CGSize, with coordinator: UIViewControllerTransitionCoordinator) { 
    coordinator.animate(alongsideTransition: { context in 
     context.viewController(forKey: UITransitionContextViewControllerKey.from) 
    }, completion: {(context) -> Void in 
     self.view.layoutSubviews() 
     self.ProfileImage.layer.cornerRadius = self.ProfileImage.bounds.size.height/2 
     print(self.ProfileImage.frame.size.height) 
    }) 
} 

Répondre

0

Une réponse qui est proche mais pas parfait est de définir le rayon d'angle dans viewWillLayoutSubviews() au lieu de viewWillTransition() parce que la vue UIStack expose ses sous-vues après la rotation pas pendant.

override func viewWillLayoutSubviews() { 
    self.ProfileImage.layer.cornerRadius = self.ProfileImage.frame.size.height/2 
} 

merci aux répondants à cet article pour moi pointant dans la bonne direction: View frame changes between viewWillAppear: and viewDidAppear:


Mon problème est maintenant que en quelque sorte la taille de la vue UIImage a changé par quelques pixels après l'appel viewDidLayoutSubviews. Y a-t-il une autre fonction qui serait appelée quand une vue de pile ou un autolayout se recalcule après le DidLayoutSubviews?

L'application semble bien, mais il y a un autre comportement qui se passe que je ne comprends pas.