Подтвердить что ты не робот

IOS 8.3 'UIView-Encapsulated-Layout-Width' в пользовательской клавиатуре

Я реализовал пользовательскую клавиатуру. Он отлично работает на устройстве с iOS 8.2.

Однако, когда я запускаю тот же код на устройстве с iOS 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)]>

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

4b9b3361

Ответ 1

    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 может вызвать проблему).

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

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

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

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

Ответ 2

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

Это означает, что inputView UIInputViewController имеет UIViewAutoresizingFlexible для родительского элемента inputView

И маскирование преобразуется в инкапсулированное ограничение с именем

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

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

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

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

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

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

Ответ 3

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