Не удается получить ограничения прямо в пользовательской клавиатуре iOS8
У меня серьезные проблемы с автоматическим макетом в iOS 8. Я работаю над пользовательской клавиатурой, но не могу отобразить вид на правильной высоте. Визуализированный вид на устройстве получается слишком низким, больше похожим на предполагаемую высоту только UIImageView. Я установил ограничения, как показано на рисунке:
Но я продолжаю получать эту ошибку в журнале, которая ничего не говорит мне (вероятно, потому что я не понимаю, где искать):
2014-12-06 19:56:45.095 [40268:12181198] Unable to simultaneously satisfy constraints.
Probably at least one of the constraints in the following list is one you don't want. Try this:(1) look at each constraint and try to figure out which you don't expect; (2) find the code that added the unwanted constraint or constraints and fix it. (Note: If you're seeing NSAutoresizingMaskLayoutConstraints that you don't understand, refer to the documentation for the UIView property translatesAutoresizingMaskIntoConstraints)
(
"<NSLayoutConstraint:0x600000096940 V:[UIInputView:0x7fe780d3f600(246)]>",
"<NSLayoutConstraint:0x600000097390 'UIView-Encapsulated-Layout-Height' V:[UIInputView:0x7fe780d3f600(0)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x600000096940 V:[UIInputView:0x7fe780d3f600(246)]>
Make a symbolic breakpoint at UIViewAlertForUnsatisfiableConstraints to catch this in the debugger.
The methods in the UIConstraintBasedLayoutDebugging category on UIView listed in <UIKit/UIView.h> may also be helpful.
Я пытался следовать коду в iOS 8 Custom Keyboard: изменение высоты, но он все равно не работает.
Редактировать:
Я устанавливаю ограничение по высоте с помощью следующей функции:
override func updateViewConstraints() {
super.updateViewConstraints()
// Add custom view sizing constraints here
let changeToOrientation = deviceInfoService.getOrientationForView(self.inputView)
if (changeToOrientation == Orientation.Portrait) {
self._heightConstraint!.constant = 246
self.inputView.addConstraint(self._heightConstraint!)
} else {
self._heightConstraint!.constant = 192
self.inputView.addConstraint(self._heightConstraint!)
}
}
3 ответа
Ошибка говорит вам, что у вас есть конфликтующие ограничения. UIView-Encapsulated-Layout-Height
кажется, предопределенная высота (При поиске я в основном нашел ссылки на его использование в UICollectionView
). Я предполагаю, что высота, определяемая ОС, разрешена вашей клавиатуре. Другим ограничением, скорее всего, является размер встроенного содержимого созданного вами представления (316 и 30 действительно составляют 246).
Я пришел к выводу, что вы, вероятно, сделали что-то не так, когда вы изменили высоту. Поскольку я не слишком знаком с разработкой расширения клавиатуры, я не могу вам сказать, что. Однако, когда дело дошло до расширений Today, с которыми я немного поработал, был метод, который вы могли переопределить, который указывал высоту виджета.
Это похоже на ошибку в реализации пользовательской клавиатуры iOS. Обходной путь в настоящее время состоит в том, чтобы приспособить приоритет вашего ограничения к больше / меньше чем 1000
Это похоже на то, как можно обеспечить высоту TodayExtension. Попробуй это:
self.preferredContentSize = CGSizeMake(320, 246);
Вот так я явно установил высоту моего сегодняшнего расширения против ограничения высоты. Я попробую это сам, просто сейчас собираю пример проекта клавиатуры.