Неправильные ограничения на конечное пространство для детей UIScrollView

Я создал новый View Controller, а затем добавил Scroll View как дочерний элемент корневого представления и установил "Leading/Top/Trailing/Bottom Space to Superview" равным 0, чтобы вид прокрутки полностью заполнил родительский элемент.

Затем я добавил кнопку в виде дочернего элемента прокрутки, с ограничениями пространства от 15 до "Superview" (т.е. в виде прокрутки). Таким образом, я ожидаю, что кнопка будет иметь расстояние от 15 до верхних/левых/правых границ, а содержимое прокрутки - до конца в нижней части кнопки + 15. Однако ширина кнопки неверна (протестировано в Xcode 5 Interface Builder, iOS 6/7):

Example

Он даже не работает, если я сдерживаю кнопку с помощью "Равная ширина для наблюдения"! Все еще не занимает полную ширину.

Как это решить?

Ответ 1

Нашел хорошее решение:) Причина такого поведения заключается в том, что представление прокрутки адаптирует размер его содержимого к тому, что на самом деле необходимо для его подзонов, и не будет автоматически заполнять ширину/высоту. Если ширина должна быть заполнена, представление прокрутки должно содержать по крайней мере одно представление, которое заполняет ширину экрана.

С помощью этих шагов я добавил представление, которое имеет равную ширину в представлении прокрутки (сам вид прокрутки, а не область просмотра содержимого), что приводит к тому, что мое представление прокрутки наконец расширяется до полной ширины, потому что я также добавил ограничения "space to superview 0/0/0/0" в список прокрутки.

  • Предполагая пустой контроллер представления с одним представлением root
  • Добавить прокрутку, установить ограничения "пространство для просмотра сверху/слева/справа/снизу = 0/0/0/0" на нем
  • Добавьте свой пользовательский интерфейс в список прокрутки, но вы хотите, и установите ограничения так же, как вы хотите
  • Добавьте новый вид, переименуйте его в нечто вроде "Обеспечивает ширину прокрутки прокрутки" со следующими ограничениями
    • Ведущее/конечное/верхнее пространство для просмотра (что вид прокрутки!) = 0
    • Высота 0, потому что мы хотим, чтобы она была невидимой, потому что представление является только помощником
    • Важная часть. Выберите этот вид и прокрутку в иерархии и ограничьте их равной ширине. Поскольку представление прокрутки ограничено его супервизором, оно получит ширину. Затем это ограничение гарантирует, что просмотр содержимого прокрутки также (по крайней мере) широко представлен.