2014-11-30 4 views
2

У меня серьезные проблемы с автоматической компоновкой в ​​iOS 8. Я работаю над пользовательской клавиатурой, но я не могу получить представление для отображения на правильной высоте. Представленный вид на устройстве выходит слишком низко, больше похоже на предполагаемую высоту UIImageView. Я установил ограничения, как показано на рисунке:Невозможно получить ограничения прямо в пользовательской клавиатуре iOS8

XCode Screenshot

Но я получаю эту ошибку в журнале, что ничего мне не говорит (возможно, потому что я не понимаю, где искать):

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: Changing the Height, но он по-прежнему не работает.

Edit:

Я устанавливаю мое ограничение высоты с помощью следующей функции:

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!) 
    } 
} 
+0

Не могли бы вы добавить остальную часть журнала? В частности, часть о 'translatesAutoresizingMaskIntoConstraints', которая предшествует. – Rick

+0

С AutoLayout вы вообще не хотите устанавливать '.translatesAutoresizingMaskIntoConstraints = no'? – mc01

+0

Я добавил недостающую часть журнала. – Malakim

ответ

2

ошибка говорит вам, что у вас есть противоречивые ограничения. UIView-Encapsulated-Layout-Height представляется заранее определенной высотой (при поиске я в основном нашел ссылки на его использование в UICollectionView). Я предполагаю, что это высота, определяемая операционной системой, которой разрешена ваша клавиатура. Другим ограничением является, скорее всего, внутренний размер содержимого вашего созданного представления (316 и 30 действительно составляет до 246).

Я пришел к выводу, что вы, вероятно, что-то сделали неправильно, когда изменили высоту. Поскольку я не слишком хорошо знаком с расширением расширения клавиатуры, я не могу вам сказать. Однако, когда дело доходит до Today Extensions, с которым я немного поработал, был метод, который вы могли бы переопределить, указав высоту виджета.

+0

Руководство по программированию расширений приложений: «Вы можете настроить высоту основного вида пользовательской клавиатуры с помощью« Автоматического макета ». По умолчанию пользовательская клавиатура имеет размер, соответствующий клавиатуре системы, в зависимости от размера экрана и ориентации устройства. Ширина всегда устанавливается системой, чтобы она равнялась текущей ширине экрана. Чтобы отрегулировать высоту пользовательской клавиатуры, измените ограничение высоты основного изображения. В iOS 8.0 вы можете настроить высоту пользовательской клавиатуры в любое время после первоначального рисования ее основного вида экран «. Это то, что я * думаю * Я делаю. :) – Malakim

+0

Но насколько я вижу, у вас нет ограничений по высоте на 'UIInputView', только на его подзонах. Это работает, если вы это добавите? – Rick

+0

Я установил ограничение высоты для представления ввода в коде - как показано в моем редактировании. По какой-то причине я не могу установить ограничение высоты на представление ввода в IB. – Malakim

1

Это похоже на то, как можно обеспечить высоту TodayExtension. Попробуйте это:

self.preferredContentSize = CGSizeMake(320, 246); 

Вот как я установить высоту моего расширения сегодня против установления ограничений высоты в явном виде. Я попробую это сам, просто создав образец проекта клавиатуры сейчас.

+0

Что вы узнали? – nurxyz

6

Это похоже на ошибку в реализации пользовательской клавиатуры iOS. Обходной путь в настоящее время заключается в том, чтобы настроить приоритет вашего ограничения больше/меньше 1000

+1

Установка приоритета на «мое» ограничение до 999 удаляет ошибку в журнале. Но высота остается верной - так что я думаю, что она работает. – Malakim

+0

так выберите мой ответ :) – nurxyz

Смежные вопросы