Расширение клавиатуры теряет высоту в 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
Результат выглядит так:
Этот макет именно то, что мы ожидаем. Теперь вместо этого давайте закрепим новый вид сверху нашей следующей кнопки клавиатуры. Мы избавляемся от только что добавленного ограничения и заменяем его
anotherView.bottomAnchor.constraint(equalTo: self.nextKeyboardButton.topAnchor).isActive = true
Логически, результирующая высота должна быть одинаковой (определяется системой)
Результат теперь такой:
В iOS 9 он ведет себя, как и ожидалось, но в iOS 10 размер гибкой высоты уменьшен до 0, и все, что осталось, это кнопка фиксированной высоты.
Нет сообщений о конфликтующих ограничениях. Я пытаюсь выяснить, что может быть причиной этого и почему это будет происходить только на iOS 10.