UIScrollView + центрированный вид + неоднозначный прокручиваемый размер контента + множество размеров iPhone

Я имею:

  • приложение, которое должно работать в ландшафтном и портретном режиме.
  • вид с полноразмерной прокруткой сверху.
  • какой-то вид внутри прокрутки с фиксированной шириной и высотой. (с добавленными ограничениями H и W)
  • установите для просмотра внутри прокрутки как горизонтальный по центру в контейнере. (добавлено в соответствии с ограничением)

У меня есть предупреждение в конструкторе интерфейса "Имеет неоднозначную ширину прокручиваемого содержимого".

Единственный способ решить эту проблему, который я знаю, - это установить конечные и ведущие ограничения. Но для разных айфонов (5,5", 4,7", 4") мне нужно установить разные трейлинг и лидирующие ограничения.

Как я могу устранить это предупреждение и по-прежнему иметь горизонтальное представление по центру с фиксированными W и H для всех размеров iPhone?

Я создаю Github репо, чтобы проиллюстрировать эту проблему: ScrollViewAmbigous

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

3 ответа

Решение

Утром со свежей чашкой кофе я разобрался с этим вопросом!

Итак, вот начальное состояние для простейшего случая:

  1. scrollView с 0 ограничениями для всех ребер
  2. Кнопки по центру по горизонтали и вертикали с фиксированной шириной и высотой
  3. И, конечно же, Has ambiguous scrollable content width а также Has ambiguous scrollable content height досадные предупреждения.

1

Все, что нам нужно сделать, это:

  • Добавьте 2 дополнительных ограничения, например "0" для конечного и / или нижнего пробела для нашего представления (в моем случае - UIButton)

Важно: вы должны добавить трейлинг и / или нижние ограничения. Не "ведущий и топ" - это не работает!

2

Вы можете проверить это в моем примере проекта, демонстрирующего, как решить эту проблему: ScrollViewAmbigous

PS

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

Проблема:

  1. Предупреждение говорит нам, что размер содержимого прокрутки зависит от его подпредставлений.
  2. в то время как ваше подпредставление не имеет строгого правила позиции и размера (без фиксированных ограничений), оно будет сбивать с толку сгенерированный размер содержимого прокрутки.

Решение:

  1. Сделайте только одно подпредставление в качестве "contentView" для scrollview.
  2. Добавьте строгие (фиксированные) ограничения к этому "contentView".

    Лучшая практика: ширина и высота равны виду прокрутки.

  3. Добавьте все другие подпредставления и ограничения в ваш "contentView".

Кажется, в этом вопросе много путаницы. Я предполагаю, что UIScrollView должен иметь ДВА ограниченных пробела, "внутренний", соединяющий его с одним из его подпредставлений (чтобы он мог знать ширину содержимого), и другой "внешний", соединяющий его с родным или супервизором, чтобы он знает ширину своего кадра.

Тот же принцип применяется для высоты, то есть два нижних ограничения пространства.

Другие вопросы по тегам