Keyboard-Erweiterung verliert in iOS 10 an Höhe, wenn in einigen Fällen versucht wird, die Größe automatisch anzupassen

Sie können hier ein Beispielprojekt herunterladen, in dem das Problem veranschaulicht wird:https: //github.com/DimaVartanian/keyboard-extension-height-bu

Wenn eine Tastaturerweiterung erstellt und keine konkrete Höhe für ihre Komponenten angegeben wird, sondern diese in der Ansicht / Eingabeansicht verankert werden, so dass das System theoretisch ihre Höhe basierend auf Umgebung und Ausrichtung ermittelt, wird diese Höhe in einigen Situationen stattdessen zu 0 und Die Tastatur ist gequetscht (mit Ausnahme von Elementen, die eine konkrete Höhe haben, wie z. B. ein Etikett oder eine Schaltfläche in Eigengröße).

Dies scheint nur unter iOS 10 aufzutreten. Unter iOS 9 wurde die Größe der untergeordneten Ansichten korrekt angepasst, um der Standardhöhe der automatischen Tastatur zu entsprechen.

Es gibt mehrere Szenarien, die sich manifestieren können, und dieses Projekt zeigt ein grundlegendes Szenario. Es beginnt mit der grundlegenden Tastaturerweiterungsvorlage mit der Standardschaltfläche "Nächste Tastatur" und den zwei Größenbeschränkungen:

self.nextKeyboardButton.leftAnchor.constraint(equalTo: self.view.leftAnchor).isActive = true
self.nextKeyboardButton.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true

Nächste erstellen wir eine einzelne andere Ansicht, die den Raum der Übersicht füllen soll, ohne eine konkrete Größe für sich selbst zu definieren:

let anotherView = UIView()
anotherView.backgroundColor = UIColor.red
anotherView.translatesAutoresizingMaskIntoConstraints = false
view.addSubview(anotherView)
anotherView.leftAnchor.constraint(equalTo: self.view.leftAnchor).isActive = true
anotherView.rightAnchor.constraint(equalTo: self.view.rightAnchor).isActive = true
anotherView.topAnchor.constraint(equalTo: self.view.topAnchor).isActive = true

Jetzt wollen wir diese neue Ansicht nur am unteren Rand unserer Tastaturübersicht verankern. Wir würden einfach etwas machen wie:

anotherView.bottomAnchor.constraint(equalTo: self.view.bottomAnchor).isActive = true

Das Ergebnis sieht so aus:

iOS 9

iOS 10

Dieses Layout ist genau das, was wir erwarten. Lassen Sie uns stattdessen die neue Ansicht oben auf unserer nächsten Tastaturschaltfläche verankern. Wir werden die soeben hinzugefügte Einschränkung los und ersetzen sie durch

anotherView.bottomAnchor.constraint(equalTo: self.nextKeyboardButton.topAnchor).isActive = true

Logisch sollte die resultierende Höhe dieselbe sein (vom System festgelegt)

Das Ergebnis ist jetzt das:

iOS 9

iOS 10

Auf iOS 9 verhält es sich wie erwartet, aber auf iOS 10 wird die flexible Höhenansicht auf 0 verkleinert und es bleibt nur die Schaltfläche für die feste Höhe.

Es gibt keine Meldungen zu widersprüchlichen Bedingungen. Ich versuche herauszufinden, was dies verursachen könnte und warum es nur unter iOS 10 passieren würde.

Antworten auf die Frage(12)

Ihre Antwort auf die Frage