Xamarin iOS: автоматический макет в прокрутке?

У меня есть scrollView на моей раскадровке, на которой я добавил верхние, левые, правые, нижние ограничения, чтобы он автоматически изменялся в соответствии с различными размерами экрана. Проблема в том, что если я добавлю представление изображения или любой другой материал в этом представлении прокрутки и наложу ограничения на это представление изображения, чтобы сохранить некоторое расстояние от верхней, левой, правой и нижней границ прокрутки. Это просто не работает. Я хотел бы, чтобы все было изменено в соответствии с размером экрана целевого устройства. Как я мог это сделать?

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

введите здесь описание изображения


person SamuraiJack    schedule 29.09.2017    source источник
comment
Что произойдет, как вы делаете?   -  person Kevin Li    schedule 02.10.2017
comment
Привет, у тебя есть вопросы?   -  person ColeX - MSFT    schedule 09.10.2017
comment
@ColeXia Я потерялся. Я проголосовал за ваш ответ за ваши усилия. Но все же как-то я просто не могу заставить его работать. Все, что мне нужно выяснить, это как создать страницу, подобную этой: ibb.co/kM7Lkb с вертикальной прокруткой но нет горизонтальной прокрутки. Если бы я мог понять, как это сделать, думаю, 80% процентов моих проблем были бы решены. Я мог бы опубликовать это как отдельный вопрос, если вы хотите, чтобы я.   -  person SamuraiJack    schedule 09.10.2017
comment
@Arbaaz, почему бы тебе не использовать UITableView? Я думаю, что это проще для вас требование.   -  person ColeX - MSFT    schedule 09.10.2017
comment
Разве UITableView не используется, когда вам нужно отображать один и тот же контент несколько раз? Изображение, которое я показал, является просто примером. Я не думаю, что UITableView будет проще, поскольку в каждой ячейке не будет текстового поля. Страница может иметь комбинацию различных элементов, таких как текстовое поле, раскрывающийся список или изображения. Все, что я хочу, это поместить его на страницу и позволить iOS автоматически изменять ширину и увеличивать или уменьшать вертикальную прокрутку самостоятельно.   -  person SamuraiJack    schedule 09.10.2017
comment
Да, когда нам нужно отобразить один и тот же контент несколько раз, более подходящим является UITableView. Я видел, что вы хотите разместить так много элементов управления в прокрутке, я думаю, вам следует установить их в коде, а не в дизайне раскадровки.   -  person ColeX - MSFT    schedule 09.10.2017


Ответы (2)


Это немного сложно объяснить.

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

Однако UIScrollView немного отличается от UIView. В общем, нам просто нужно установить left,right,top,bottom , но в UIScrollView у него есть определение, называемое contentSize, которое определяет фактический размер прокрутки. поэтому ограничений, которые мы установили выше, недостаточно.

Итак, в качестве обходного пути мы добавляем контейнерное представление внутрь прокрутки для определения размера содержимого.

1. Ограничение на прокрутку (зеленая область на следующем рисунке)

введите здесь описание изображения

2. Ограничение на представление контейнера (красная область на следующем рисунке).

обратите внимание: мы устанавливаем дополнительную ширину (равную scrollview), чтобы указать, что ширина фиксирована, это означает, что мы не можем прокручивать по горизонтали, но разрешена вертикальная ориентация.

введите здесь описание изображения

3. Ограничение внутреннего вида (синяя область на следующем рисунке)

введите здесь описание изображения

Результат испытаний :

введите здесь описание изображения

айфон 5с

введите здесь описание изображения

iPad Air2

введите здесь описание изображения

person ColeX - MSFT    schedule 03.10.2017
comment
не могли бы вы добавить текстовое поле в синей области. (ширина почти такая же, как и сама синяя область? Я пробовал, но текстовое поле обрезается на небольших экранах, что означает, что синяя область не изменяет размер должным образом. - person SamuraiJack; 03.10.2017
comment
@Arbaaz, синяя область — это внутренний элемент управления, который вы хотите разместить, как установить ограничение на текстовое поле? - person ColeX - MSFT; 03.10.2017
comment
не могли бы вы как-нибудь поделиться со мной файлами кода? Я не могу заставить его работать. - person SamuraiJack; 04.10.2017
comment
Я потерян. Я проголосовал за ваш ответ за ваши усилия. Но все же как-то я просто не могу заставить его работать. Все, что мне нужно выяснить, это как создать страницу, подобную этой: ibb.co/kM7Lkb С вертикальной прокруткой, но без горизонтальной прокрутки. Если бы я мог понять, как это сделать, думаю, 80% процентов моих проблем были бы решены. Я мог бы опубликовать это как отдельный вопрос, если вы хотите, чтобы я. - person SamuraiJack; 09.10.2017
comment
Я отмечу это, как только моя проблема будет решена. Я разместил еще один вопрос, возможно, вы могли бы мне помочь с ним. stackoverflow.com/questions/46642679/ - person SamuraiJack; 09.10.2017
comment
Привет, я пытаюсь сделать это с помощью кода вместо построителя интерфейса, и я не могу заставить это работать: stackoverflow.com/questions/48713184/ Пожалуйста, помогите! - person bobek; 09.02.2018

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

Здесь я сделал полный ответ, будут все подробности,

https://stackoverflow.com/a/49096334/3765617

Пишу сюда, потому что, может быть, кому-то в будущем это будет полезно.

person axl coder    schedule 04.03.2018