Расширение клавиатуры теряет высоту в iOS 10 при попытке автоматического определения размера в некоторых случаях

Вы можете скачать пример проекта, демонстрирующий проблему ниже, здесь:https://github.com/DimaVartanian/keyboard-extension-height-bug

Когда создается расширение клавиатуры и не указывается конкретная высота для его компонентов, а вместо этого привязывается их к представлению view / inputView, чтобы в теории система определяла их высоту на основе среды и ориентации, в некоторых ситуациях эта высота вместо этого превращается в 0, а клавиатура раздавлена ​​(за исключением всего, что имеет конкретную высоту, такого как метка или кнопка собственного размера).

Кажется, это происходит только на iOS 10. В iOS 9 дочерние представления изменяли размеры правильно, чтобы соответствовать автоматической высоте клавиатуры по умолчанию.

Есть несколько сценариев, которые могут проявиться, и этот проект демонстрирует базовый. Он начинается с базового шаблона расширения клавиатуры с кнопкой по умолчанию «следующая клавиатура» и двумя ограничениями по размеру, с которыми он поставляется:

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

Далее мы создаем еще одно представление, которое мы хотим заполнить пространство суперпредставления, не определяя для себя конкретный размер:

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

Теперь, скажем, мы просто хотим привязать это новое представление к основанию нашего супервидения с клавиатурой. Мы бы просто сделали что-то вроде:

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

Результат выглядит так:

iOS 9

iOS 10

Этот макет именно то, что мы ожидаем. Теперь вместо этого давайте закрепим новый вид сверху нашей следующей кнопки клавиатуры. Мы избавляемся от только что добавленного ограничения и заменяем его

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

Логически, результирующая высота должна быть одинаковой (определяется системой)

Результат теперь такой:

iOS 9

iOS 10

В iOS 9 он ведет себя, как и ожидалось, но в iOS 10 размер гибкой высоты уменьшен до 0, и все, что осталось, это кнопка фиксированной высоты.

Нет сообщений о конфликтующих ограничениях. Я пытаюсь выяснить, что может быть причиной этого и почему это будет происходить только на iOS 10.

Ответы на вопрос(5)

Ваш ответ на вопрос