У меня есть раскадровка с Autolayout и классами размера. Довольно сложный макет, и, к сожалению, я не могу точно определить, как воспроизвести проблему в новом проекте.
Но рассматриваемая точка привязана к левому и правому краю экрана с ограничением, которое имеет приоритет 750 (т.е. |-([email protected])-[myView]-([email protected])-|
, дополнительно имеет большее или равное ограничение с приоритетом 1000 (т.е. |-(>=0)-[myView]-(>=0)-|
)). Это делается для ограничения ширины на iPad, поэтому существует ограничение ширины width <= 600 @1000
, а также горизонтальное положение по горизонтали в контейнере. Кроме того, представление имеет ограничение соотношения сторон 3: 1. Поскольку я сказал, довольно сложный.
Интерфейс Builder не обнаруживает проблем с ограничениями. Предварительный просмотр макета Xcode корректен для всех устройств.
Когда я запускаю приложение, iOS говорит мне, что у него конфликтующие ограничения.
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:0x7fd72853ff80 DMXKit.DipSwitchAssembly:0x7fd72990d0e0.width == 3*DMXKit.DipSwitchAssembly:0x7fd72990d0e0.height>",
"<NSLayoutConstraint:0x7fd728574e50 '_UITemporaryLayoutWidth' H:[DMXKit.DipSwitchAssembly:0x7fd72990d0e0(400)]>",
"<NSLayoutConstraint:0x7fd72856e9c0 V:[DMXKit.DipSwitchAssembly:0x7fd72990d0e0(133)]>"
)
Will attempt to recover by breaking constraint
<NSLayoutConstraint:0x7ffb19798000 DMXKit.DipSwitchAssembly:0x7ffb1979a000.width == 3*DMXKit.DipSwitchAssembly:0x7ffb1979a000.height>
Это повторяется пару раз, с теми же (то есть, с теми же указателями) ограничениями. Это тоже странно, похоже, что ограничение не нарушено. При запуске приложение выглядит на 100% правильным. Когда я смотрю приложение в отладчике представления Xcode, ограничение с адресом 0x7ffb19798000
все еще существует, поэтому оно никогда не прерывалось.
Откуда возникает константа _UITemporaryLayoutWidth
? Очевидно, я не добавил его. Google не плюет ничего полезного в _UITemporaryLayoutWidth
. Кто-нибудь сталкивался с такой проблемой?