У меня есть проблемы с AutoLayout в Interface Builder (Xcode 5/iOS 7). Это очень важно и важно, поэтому я думаю, что каждый должен знать, как это работает. Если это ошибка в Xcode, это критический вопрос!
Итак, всякий раз, когда у меня есть иерархия представлений, такая как я сталкиваюсь с проблемами:
>UIViewController
>> UIView
>>>UIScrollView
>>>>UILabel (or any other comparable UIKit Element)
UIScrollView имеет жесткие ограничения, например, 50 пикселей со всех сторон (без проблем). Затем я добавляю ограничение по максимальному пространству в UILabel (без проблем) (и я даже могу выровнять высоту/ширину метки, ничего не меняет, но не должен быть ненужным из-за собственного размера метки)
Проблема возникает, когда я добавляю трейлинг-ограничение в UILabel:
Например, Trailing Space для: Superview Equals: 25
Теперь возникают два предупреждения - и я не понимаю, почему:
A) Масштабируемость прокручиваемого содержимого (просмотр прокрутки имеет неоднозначную прокручиваемую высоту/ширину содержимого)
B) Неверные представления (ожидаемая метка: x = -67 Фактическая: x = 207
Я сделал этот минимальный пример в новом новом проекте, который вы можете скачать, и я прикрепил скриншот. Как вы можете видеть, Interface Builder ожидает, что ярлык будет находиться за пределами границы UIScrollView (оранжевый пунктирный прямоугольник). Обновление рамки Label с помощью инструмента Resolve Issues Tool перемещает ее прямо там.
Обратите внимание: если вы замените UIScrollView на UIView, поведение будет таким, как ожидалось (рамка Label верна и соответствует ограничению). Так что, похоже, проблема с UIScrollView или я упускаю что-то важное.
Когда я запускаю приложение, не обновляя рамку Label, как было предложено IB, он позиционируется просто отлично, где он должен быть, и UIScrollView прокручивается. Если я обновляю фрейм, ярлык скрыт из виду, а UIScrollView не будет прокручиваться.
Помоги мне Оби-Ван Кеноби! Почему неоднозначный макет? Почему неуместное мнение?
Вы можете скачать образец проекта здесь и попробовать, если вы можете выяснить, что происходит: https://github.com/Wirsing84/AutoLayoutProblem