Неверные ограничения конечного пространства для дочерних элементов UIScrollView

Я создал новый контроллер представления, затем добавил представление прокрутки в качестве дочернего элемента корневого представления и установил для параметра «Ведущее / верхнее / конечное / нижнее пространство в супервизоре» значение 0, чтобы представление прокрутки полностью заполнило свой родительский элемент.

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

Пример

Это даже не сработает, если я ограничу кнопку «Равной шириной для Superview»! По-прежнему не занимает всю ширину.

Как мне решить эту проблему?


person AndiDog    schedule 23.09.2013    source источник
comment
См. Ответ здесь: stackoverflow.com/questions/16843633/   -  person catamphetamine    schedule 14.01.2014


Ответы (1)


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

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

  • Предполагая пустой контроллер представления с одним корневым представлением
  • Добавьте режим прокрутки, установите для него ограничения «пространство для просмотра сверху / слева / справа / снизу = 0/0/0/0».
  • Добавьте свой пользовательский интерфейс в представление прокрутки, как хотите, и установите ограничения также, как вы хотите
  • Add a new View, rename it to something like "Ensures scroll view fills width", with the following constraints
    • Leading/trailing/top space to superview (that's the scroll view!) = 0
    • Высота 0, потому что мы хотим, чтобы он был невидимым, потому что представление является только помощником
    • Важная часть: выберите это представление и представление прокрутки в иерархии и ограничьте их равной шириной. Поскольку вид прокрутки ограничен своим супервизором, он получит ширину. Затем это ограничение гарантирует, что представление содержимого в представлении прокрутки также (по крайней мере) будет таким же широким.
person AndiDog    schedule 24.09.2013
comment
Равной ширины! Так элегантно! - person Lucas van Dongen; 15.10.2014
comment
Для ясности: Добавить новое представление должно быть дочерним элементом представления прокрутки. - person theblindprophet; 26.07.2017