2015-04-10 1 views
11

Я реализовал пользовательскую клавиатуру. Он отлично работает на устройстве с iOS 8.2.iOS 8.3 'UIView-Encapsulated-Layout-Width' в пользовательской клавиатуре

Однако, когда я запускаю тот же код на устройстве с прошивкой 8.3 я получаю следующие предупреждения и высота клавиатуры не установлен должным образом:

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) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x15dd1da0 h=-&- v=-&- Keyboard:0x15db2b00.width == UIView:0x15da7b90.width - 320>", 
    "<NSLayoutConstraint:0x15dd2520 'UIView-Encapsulated-Layout-Width' H:[UIView:0x15da7b90(0)]>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x15dd2520 'UIView-Encapsulated-Layout-Width' H:[UIView:0x15da7b90(0)]> 

Я понятия не имею, что это значит. Пожалуйста, помогите мне разобраться.

+0

Я действительно видел это сообщение на 8.2 устройствах, по моему опыту он фактически указывает, что ваше ограничение * было соблюдено и ваша высота установлена ​​правильно. У вас есть полный доступ к вашему устройству 8.3? Есть ли у вас какие-либо другие взгляды в 'UIInputView' с ограничениями автоопределения? –

+0

@BenPious К сожалению, высота тоже не была установлена. – Neelesh

ответ

3
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) 
(
    "<NSAutoresizingMaskLayoutConstraint:0x15dd1da0 h=-&- v=-&- Keyboard:0x15db2b00.width == UIView:0x15da7b90.width - 320>", 
    "<NSLayoutConstraint:0x15dd2520 'UIView-Encapsulated-Layout-Width' H:[UIView:0x15da7b90(0)]>" 
) 

Will attempt to recover by breaking constraint 
<NSLayoutConstraint:0x15dd2520 'UIView-Encapsulated-Layout-Width' H:[UIView:0x15da7b90(0)]> 

Это говорит вам, что он не может удовлетворить все ограничения сразу.

У вас есть ограничение <NSAutoresizingMaskLayoutConstraint:0x15dd1da0 h=-&- v=-&- Keyboard:0x15db2b00.width == UIView:0x15da7b90.width - 320>, который диктует ширину клавиатуры равна ширине UIView на 0x15da7b90 минус 320 (проверьте отладчик, который один это, я обычно смотрю на GUI отладчик, если я знаю, что UIView s может быть причиной проблемы).

Другой конфликтующие ограничение <NSLayoutConstraint:0x15dd2520 'UIView-Encapsulated-Layout-Width' H:[UIView:0x15da7b90(0)]>, который диктует ширину UIView при 0x15da7b90 (такой же один), чтобы быть 0. Он не может удовлетворить как это один и тот выше, так что это разбивает этот.

Я вижу, что ваше первое ограничение является одним из типов NSAutoresizingMaskLayoutConstraint, поэтому вы можете попытаться установить setTranslatesAutoresizingMaskIntoConstraints на false на вашем представлении, что, вероятно, устранит первое ограничение, тем самым устраняя конфликт.

Другая полезная документация:

  • Visual Format Language, формат, который Xcode использует в журнале, полезно знать этот язык, чтобы отладить их лучше.
  • View Debugging in Xcode, помогает определить, какие виды есть где и по каким адресам.
0

У меня также был тот опыт, когда я сделал расширение клавиатуры.

То есть о том, что inputView из UIInputViewController имеет UIViewAutoresizingFlexible к parentView из inputView

И маскировка переводится в инкапсулированных ограничение с именем

<NSLayoutConstraint:0x15dd2520 'UIView-Encapsulated-Layout-Width' H:[UIView:0x15da7b90(0)]> 

В журналах, есть еще одно переведенное ограничение (от маскировки), поэтому я думаю, что вы легко используете его для управления представлениями. На мой взгляд, вы должны использовать NSConstraint (ширина и высота ...)

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

Кроме того, я встретил эту ситуацию, когда я запускаю свою клавиатуру на устаревшем приложении (не поддерживается iPhone 6/6 +).

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

Если у вас есть другой вопрос или мой ответ недостаточен, скажите мне еще раз.

+0

У меня уже есть ограничение ширины и высоты. – Neelesh

+0

Или вы добавляете автоматическое представление в inputView как collectionview? –

0

NSAutoresizingMaskLayoutConstrain Это означает, что вы не установили ограничения автоматической компоновки. Попробуйте правильно установить его, тогда ваша проблема будет решена.

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