UIScrollView + Централизованный просмотр + Неоднозначный размер прокручиваемого контента + много размеров iPhone

У меня есть:

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

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

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

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

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

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

Ответ 1

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

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

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

1

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

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

Важно: вам нужно добавить ограничения трейлинг и/или снизу. Не "ведущий и верхний" - он не работает!

2

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

P.S.

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

Ответ 2

Проблема:

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

Решение:

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

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

  • Добавьте все другие подсмотры и ограничения в ваш контент-контент.