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