0

Ich habe eine Stack-Ansicht proportional mit Bildern und Beschriftungen und Text und Schaltflächen innerhalb eines Popover über meine primäre Ansicht Controller implementiert. Wenn ich zum Popover übergehe, das ich benutze, erscheint die Übersteuerung, um den Eckenradius des Bildes, das ich ProfileImage nenne, 1/2 zu nennen, so dass es als ein Kreis erscheint.Wie verwende ich Attribute von Subviews in StackView gesetzt proportionell zu füllen, wie es neu berechnet nach

I Wenn ich das Gerät rotiere, berechnet der Stack die Größe von profileImage neu und ändert sie. Ich habe versucht, den folgenden Code zu verwenden, um den Eckenradius so anzupassen, dass es ein Kreis ist, wenn die Ansicht wechselt. Ich habe diesen Code sowohl im Completion-Block als auch im Transition-Block ausprobiert.

Wenn ich das Gerät rotiere, wird der Eckenradius durch die Größe des Bildes in der ALTEN Ausrichtung festgelegt, nicht in der NEUEN Ausrichtung. Es fühlt sich an, als ob der Übergang zur neuen Orientierung geschieht und DANN berechnet sich der Stack neu. Der Eckenradius scheint sich zu aktualisieren, bevor dies geschieht. Ich würde gerne verstehen, wie die height -Eigenschaft des Bildes aufgerufen wird, die die Höhe in der neuen Ansicht darstellt, nachdem das Gerät rotiert und der Stapel die Bildgröße basierend auf dieser neuen Ausrichtung neu berechnet.

Vielen Dank für Ihre Hilfe. Weiter unten finden Sie den Code in Frage:

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) 
    }) 
} 

Antwort

0

Eine Antwort, die nahe ist, aber nicht perfekt ist, den Eckenradius in viewWillLayoutSubviews zu setzen() statt in viewWillTransition(), weil die UIStack Ansicht seiner Subviews legt nach der Rotation nicht während es.

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

Dank an die Teilnehmer zu diesem Artikel für mich in der richtigen Richtung: View frame changes between viewWillAppear: and viewDidAppear:


jetzt Mein Problem ist, dass irgendwie die Größe der UIImage Ansicht um einige Pixel geändert hat nach dem Aufruf von viewDidLayoutSubviews. Gibt es eine andere Funktion, die aufgerufen wird, wenn eine Stapelansicht oder ein automatisches Layout nach den DidLayoutSubviews neu berechnet wird?

Die App sieht gut aus, aber es passiert etwas anderes, was ich nicht verstehe.

Verwandte Themen