iOS 8.3 'UIView-Encapsulated-Layout-Width' in Custom Keyboard

 ̄綄美尐妖づ 提交于 2019-12-01 15:29:56
    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)]>

It is telling you that it can't satisfy all constraints at once.

You have a constraint <NSAutoresizingMaskLayoutConstraint:0x15dd1da0 h=-&- v=-&- Keyboard:0x15db2b00.width == UIView:0x15da7b90.width - 320>, which dictates the width of the keyboard equals the width of the UIView at 0x15da7b90 minus 320 (check the debugger which one this is, I usually look at the GUI debugger if I know what UIViews might be causing the problem).

The other conflicting constraint is <NSLayoutConstraint:0x15dd2520 'UIView-Encapsulated-Layout-Width' H:[UIView:0x15da7b90(0)]>, which dictates the width of the UIView at 0x15da7b90 (same one) to be 0. It cannot satisfy both this one and the one above, so it breaks this one.

I see that your first constraint is one of the type NSAutoresizingMaskLayoutConstraint, so you can try to set setTranslatesAutoresizingMaskIntoConstraints to false on your view, which will probably remove the first constraint, thus removing the conflict.

Other helpful documentation:

I also had that experiences when I made Keyboard Extension.

That is about that the inputView of UIInputViewController has UIViewAutoresizingFlexible to parentView of inputView

And the masking is translated into encapsulated constraint with the name

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

In your logs, there is another translated constraint(from masking), so I think you use it for managing views easily. In my opinion, you have to use NSConstraint(width and height ...)

I'd tried to remove the masking from the inputView, but it gave me much more difficulties about managing locations and bounds.

Also, I met this situation when I run my keyboard on legacy app(not supported to iPhone 6/6+).

Each time I rotate the screen, the constraint about the height is blocked with the logs like yours.

If you have another question or my answer is not adequate, tell me again.

NSAutoresizingMaskLayoutConstrain this means you have not set auto layout constraints properly. Try to set it properly then your problem will be solved

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!