Ich habe die führenden, nachfolgenden Einschränkungen einer Ansicht normalerweise festgelegt. Ich habe die Höhe auf statisch 325 festgelegt. Und für die untere Einschränkung habe ich 2 Einschränkungen festgelegt: 1. Die untere Einschränkung der Hauptansicht entspricht der unteren Einschränkung der Ansicht. 2. mit der unteren Einschränkung der Hauptansicht zur oberen Einschränkung der Ansicht. Jetzt zeige ich auf Benutzeraktion nur die Ansicht ausblenden mit Animation. Wenn die Ansicht auf dem Bildschirm angezeigt wird und die App im Hintergrund angezeigt wird, wird die Einschränkung der Ansicht automatisch geändert und die Ansicht wird ausgeblendet. Dieses Problem tritt nur bei iOS 13-Geräten auf.
Ich habe versucht, die Einschränkungen für viewWillAppear () zu aktualisieren, aber in iOS 13 wird viewWillAppear von ViewControllers auch nicht aufgerufen, wenn die App über den Hintergrund aktiviert wird. Ich denke auch nicht, dass dies eine gute Idee ist, um Einschränkungen zu aktualisieren.
class ViewController: UIViewController {
@IBOutlet weak var topConstraint: NSLayoutConstraint!
@IBOutlet weak var bottomConstraint: NSLayoutConstraint!
override func viewDidLoad() {
super.viewDidLoad()
}
override func viewWillAppear(_ animated: Bool) {
super.viewWillAppear(true)
DispatchQueue.main.asyncAfter(deadline: DispatchTime.now() + 3) {
self.topConstraint.isActive = false
self.bottomConstraint.isActive = true
UIView.animate(withDuration: 0.3) {
self.view.layoutIfNeeded()
}
}
}
}
Ich möchte nicht, dass meine Einschränkungen geändert oder aktualisiert werden, wenn sich der App-Status von Vordergrund zu Hintergrund und umgekehrt ändert.
Bitte helfen Sie mir dabei.
TIA
contentView
unter dem unteren Rand positionieren (also "außerhalb des Bildschirms") und dann animieren, um sie in die Ansicht zu verschieben ... Dann geht die App in den Hintergrund und Sie möchten, dass die Ansicht weiterhin angezeigt wird, wenn die App wieder in den Vordergrund tritt? Keine neue Animation?.frame = ...
Anweisungen), dann sollte Ihr Code einwandfrei funktionieren.ViewDidLoad()
sollte nicht aufgerufen werden, wenn die App vom Hintergrund in den Vordergrund wechselt, es sei denn, auf diesem Ereignis wird ein anderer Code ausgeführt.Antworten:
Auch dieses Problem erfüllt. Es wurde festgestellt, dass Einschränkungen immer wieder zurückgesetzt werden, falls sie
Installed
im Interface Builder nicht aktiviert sind . Behalten Sie als Problemumgehung alle EinschränkungenInstalled
in IB bei und ändern Sie denisActive
Status nur im Code.quelle
isActive
auf false gesetzt habe, wird die App wieder aktiv, wenn sie in den Hintergrund und zurück wechselt.Sie können die Lösung erreichen, indem Sie die Priorität festlegen und die Werte umdrehen.
quelle
Ich habe festgestellt, dass das Problem nur in iOS 13.0 und höher auftritt. Bitte versuchen Sie, die Änderungen an den Einschränkungen in ViewDidLayoutSubviews vorzunehmen
quelle
Die Problemumgehung, die für mich funktioniert hat, bestand darin
UIApplication.willEnterForegroundNotification
,isActive
auf alle Einschränkungen zu achten und sie an dieser Stelle festzulegen.Diese Benachrichtigung scheint veröffentlicht zu werden, nachdem das System (fälschlicherweise) alle Einschränkungen auf ihren IB-Status zurückgesetzt hat und bevor die App wieder sichtbar wird. Es ist also der perfekte Zeitpunkt, um die Einschränkungen zu beheben.
quelle
Wenn Sie wissen müssen, "wie kann ich informieren, wenn die Apps in den Vordergrund treten". Sie sollten NotificationCenter verwenden, um ein Signal an alle zu senden. Dies ist jedoch keine gute Praxis.
Vielleicht können Sie Ihr Ziel mitteilen, und wir können Ihnen einen anderen Ansatz geben.
quelle
Nun, ich habe die Lösung. Eigentlich können wir es nicht als Lösung bezeichnen. Ich habe gerade den gleichen Code auf Geräten mit iOS 13.1 oder höher ausgeführt und das Problem war behoben. Daher kann ich vorerst sagen, dass dieses Problem nur in iOS 13.0 auftritt.
quelle