2015-09-02 3 views
1

Я пытаюсь создать что-то в автозапуске, но scrollview делает невозможным что-либо сделать. Мне нужно изображение в верхней части прокрутки, которое имеет верхнюю и обе стороны, ограничено, и просто заблокирован аспектный рацион, поэтому дно может расширяться по мере необходимости. но когда я вставляю все и обновляю его, просмотр сжимается до квадрата 1x1 в углу. Я также попытался установить конечное и ведущее пространство в корневом представлении, но это тоже не сработало. WTFscrollview breaks autolayout trailing и ведущее пространство

Constraints on the scrollview to lock it to the edges

contraints on image to lock it to sides and top and aspect ratio

what happens when i update the frames

+1

может быть проще в коде вместо IB – Nick

+0

, но это всего лишь один пример. Я планирую иметь еще 10 вещей в scrollview. Правильный ответ не может быть настроен вручную, не так ли? –

+0

Очевидно, что это вопрос предпочтения, но я считаю, что ограничения кодирования вручную намного яснее! – Rupert

ответ

1

Как @sdgandhi указал, при использовании autolayout в Scrollview, как минимум он должен иметь ограничения, которые позволяют ему выработать свою contentSize.

Вы можете с радостью ограничить свой вид сверху, влево, вправо и в нижней части прокрутки. Это говорит прокрутку, что прокручиваемая область должна быть равна размеру этого вида (но не заставляет вид быть любым размером).

Мне кажется, что вы хотите сделать ширину изображения равным ширине экрана. В этом случае вы можете ограничить ширину изображения как вид, который содержит scrollview (если вид вашего контроллера просмотра является scrollview, тогда вместо этого вы должны иметь нормальный UIView в качестве представления контроллера представления и добавить к нему прокрутку, сдерживая scrollview в верхнюю, левую, правую и нижнюю части). Это приводит к тому, что ваше изображение будет иметь ширину экрана, а если contentMode настроен на поддержание пропорции, он попытается сделать свою высоту соответствующей высотой для изображения с такой шириной, что, в свою очередь, покажет scrollview, что его прокручиваемая область должна быть.

+0

Я уже пробовал присваивать левое и правое ограничения представлению, содержащему scrollview. он ничего не делал –

+1

Попробуйте использовать ограничение ширины при ограничении представлением контейнера, а не в левом и правом ограничениях - если вы используете ограничения слева и справа, вы в основном отключите scrollview (например, используя абсолютное позиционирование, если вы знакомы с CSS) , Вы ограничиваете изображение влево и вправо до scrollview (что позволяет ему знать, с чего начать и заканчивать его содержимое) и ширину изображения до ширины вид контейнера, которая заставляет ширину изображения, и, таким образом, позволяет scrollview знать, насколько широка его содержание есть. И не забудьте ограничить нижнюю часть прокрутки. – Rupert

+0

О, человек, наконец, мы куда-то попадаем. установка ширины представления на ширину uiscrollview позволила ему делать то, что я хочу. Большое вам спасибо, я ударился головой об этом, чтобы больше, чем я хотел бы признать –

2

Чтобы использовать autolayout в целях прокрутки, вы должны иметь ограничения на каждом краю Scrollview (включая дно). Причина в том, что scrollviews должны знать размер своего контента.

С вашими ограничениями, установленными так, как они есть, прокрутка не знает, что это размер содержимого.

Кроме того, прямо сейчас, все, что вы говорите, об автоопределении - это то, что вы хотите изображение с определенным соотношением. Если бы это было вне прокрутки, это было бы хорошо, потому что верхний и боковой штыри предоставили бы ему достаточно информации для самого размера. Но из-за природы прокрутки это требует дополнительной информации. Вы можете добавить ограничения ширины и высоты и установить их приоритеты на низком уровне или отметить их как заполнители, , но вам нужно предоставить автозапускному движку больше информации для его расчета макета.

См https://developer.apple.com/library/ios/technotes/tn2154/_index.html для более глубокого обсуждения технических аспектов autolayout в UIScrollView

+0

lol Я уже пробовал это. не удача –

+0

Даже имея один вид и просто устанавливая все противопоставления со всех сторон на 0, все равно делает это 1x1 –

+0

Хм, о! Вы устанавливаете ограничение соотношения сторон, но не имеете ограничений по ширине и высоте!Вы должны установить фактические ограничения ширины и высоты в дополнение к ограничению соотношения сторон, это позволит просматривать прокрутку на самом деле знать, каков его размер содержимого. – sdgandhi

Смежные вопросы