La extensión del teclado pierde altura en iOS 10 cuando intenta dimensionar automáticamente en algunos casos

Puede descargar un proyecto de muestra que demuestra el problema a continuación aquí:https://github.com/DimaVartanian/keyboard-extension-height-bug

Al crear una extensión de teclado y no especificar una altura concreta para sus componentes, sino anclarlos a la vista / inputView para que, en teoría, el sistema determine su altura según el entorno y la orientación, en algunas situaciones, esa altura se convierte en 0 y el teclado está aplastado (con la excepción de cualquier cosa que tenga una altura concreta, como una etiqueta o botón de tamaño propio).

Esto solo parece ocurrir en iOS 10. En iOS 9, las vistas secundarias cambiaron de tamaño correctamente para ajustarse a la altura predeterminada del teclado automático.

Hay varios escenarios que esto puede manifestar y este proyecto demuestra uno básico. Comienza con la plantilla básica de extensión de teclado con el botón predeterminado "siguiente teclado" y las 2 restricciones de tamaño con las que viene:

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

A continuación, creamos una vista única que queremos llenar el espacio de la supervista sin definir un tamaño concreto por sí mismo:

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

Ahora, digamos que solo queremos anclar esta nueva vista en la parte inferior de la supervista de nuestro teclado. Simplemente haríamos algo como:

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

El resultado se ve así:

iOS 9

iOS 10

Este diseño es exactamente lo que esperamos. Ahora, en su lugar, fijemos la nueva vista en la parte superior de nuestro siguiente botón de teclado. Eliminamos la restricción que acabamos de agregar y la reemplazamos con

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

Lógicamente, la altura resultante debe ser la misma (determinada por el sistema)

El resultado es ahora esto:

iOS 9

iOS 10

En iOS 9 se comporta como se esperaba, pero en iOS 10, la vista de altura flexible se redimensiona a 0 y todo lo que queda es el botón de altura fija.

No hay mensajes sobre restricciones conflictivas. Estoy tratando de descubrir qué podría estar causando esto y por qué solo sucedería en iOS 10.

Respuestas a la pregunta(5)

Su respuesta a la pregunta