A extensão do teclado perde a altura no iOS 10 ao tentar dimensionar automaticamente em alguns casos

Você pode fazer o download de um projeto de amostra demonstrando o problema abaixo aqui:https://github.com/DimaVartanian/keyboard-extension-height-bug

Ao criar uma extensão de teclado e não especificar uma altura concreta para seus componentes, mas sim ancorá-las na view / inputView, para que, em teoria, o sistema determine sua altura com base no ambiente e na orientação, em algumas situações essa altura se transforma em 0 e no o teclado está esmagado (com exceção de qualquer coisa que tenha uma altura de concreto, como etiqueta ou botão de tamanho próprio).

Isso parece ocorrer apenas no iOS 10. No iOS 9, as visualizações filho são redimensionadas corretamente para se ajustarem à altura padrão do teclado automático.

Existem vários cenários que isso pode se manifestar e esse projeto demonstra um básico. Começa com o modelo básico de extensão de teclado, com o botão padrão "próximo teclado" e as 2 restrições de tamanho que acompanham:

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

Em seguida, criamos uma única outra visão que queremos preencher o espaço da superview sem definir um tamanho concreto para si:

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

Agora, digamos que apenas queremos ancorar essa nova exibição na parte inferior da nossa visão geral do teclado. Faríamos apenas algo como:

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

O resultado fica assim:

iOS 9

iOS 10

Esse layout é exatamente o que esperamos. Agora, em vez disso, vamos ancorar a nova visualização na parte superior do próximo botão do teclado. Nós nos livramos da restrição que acabamos de adicionar e a substituímos por

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

Logicamente, a altura resultante deve ser a mesma (determinada pelo sistema)

O resultado é agora o seguinte:

iOS 9

iOS 10

No iOS 9, ele se comporta conforme o esperado, mas no iOS 10, a visualização de altura flexível é redimensionada para 0 e tudo o que resta é o botão de altura fixa.

Não há mensagens sobre restrições conflitantes. Estou tentando descobrir o que poderia estar causando isso e por que isso só estaria acontecendo no iOS 10.