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:
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:
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.