Подтвердить что ты не робот

Как сделать ScrollView с AutoLayout в Xcode5

В xcode 5 с использованием раскадровки, как сделать полнофункциональную вертикальную прокрутку прокрутки, с AutoLayout ON?
Учитывая, что подпункты имеют иерархию:

  1.UIView  
    2.UIScrollView
      3.UIView (lets call this UIDetailView to make things easier)

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

4b9b3361

Ответ 1

В этом блоге подробно описывается, как использовать UIScrollView с Autolayout ON, используя чистый подход к автоопределению. Обратите внимание, что все ограничения в сообщении в блоге определяются через раскадровку.

Подход в сообщении предполагает следующую иерархию:

1. View (main view of my UIViewController)
  2. Scroll View (UIScrollView)
     3. Container View (UIView)
       4. Content View (e.g. UIImageView)

Я думаю, что Container View будет вашим UIDetailView, а Content View будет представлять собой UIView внутри вашего UIDetailView.

https://happyteamlabs.com/blog/ios-how-to-use-uiscrollview-with-auto-layout-pure-auto-layout/

Ответ 2

UIScrollView с Autolayout в раскадровки Just Works

Я видел, как многие люди рекомендуют подход "Контейнерный взгляд", грубая сила AKA, для решения проблемы, которую они не понимают. Это неоптимально, так как теперь вы потеряли большое преимущество scrollview, заставив его думать, что контент - это весь scrollview, а не subviews, который сразу же привязан к scrollview.

Вот как я это сделал в следующем примере

--UIScrollView
  |-> UITextView
  |-> UILabel
  |-> UIOtherStuff

При размещении UIScrollView в UIView в раскадровке просто прикрепите края к 4 сторонам UIScrollView в UIView. Теперь добавьте свой контент в UIScrollView убедившись, что вы предоставите минимум два ограничения для каждого измерения. Самое замечательное в Autolayout заключается в том, что он определяет, насколько большой размер contentSize для scrollview, или UILabels, в этом случае, должен основываться на размере содержимого внутри него. AKA intrinsicContentSize. Поэтому, если вам дано предупреждение "Неоднозначный размер содержимого для scrollView", вы знаете, что вы недостаточно ограничили контент. Например, вы могли бы указать расстояние между точками Top, Bottom, Left, Right между представлениями, но подчиненное subview, которое вы сдерживаете, также нуждается в высоте, так как бесконечная вертикальная плоскость, подобная этой UIScrollView может предполагать, что ваше представление было от нуля до бесконечно высокого.

Другими словами, руководство Apple по Autolayout by Example делает простой 3-х точечный план для успеха:

  1. Создайте представление прокрутки.
  2. Поместите элемент пользовательского интерфейса внутри него.
  3. Создайте ограничения, которые полностью определяют ширину и высоту содержимого представления прокрутки.

Этот верхний TextView с "Min melding til" также растет, когда вы вводите в него больше строк, и весь ScrollView растет, чтобы сдержать его. Хотя я переопределяю класс UITextView чтобы вернуть измененное ограничение по высоте, ScrollView сам работает правильно без кодирования.

Последнее, много сообщений, связанных с Autolayout, попробуйте магическое исправление - все заклинания translatesAutoresizingMaskIntoConstraints = NO. Это необходимо, только если представление создано программно.

Example of UIScrollView with Autolayout

Ответ 3

В документации четко указано, как это сделать: UIScrollView в автоматическом макете всегда будет изменять размер для соответствия содержимому (UIDetailView).

Итак, вы должны настроить свои представления следующим образом:

  • UIView: позиция с ограничениями.
  • UIScrollView: привязка к UIView с ограничениями.
  • UIDetailView: задайте размер (собственный размер содержимого), максимальную защиту от сжатия, установите верхние, нижние, верхние и конечные ограничения для UIScrollView в 0. вручную.

Ответ 4

У меня была аналогичная проблема, и я нашел относительное простое решение, подобное DJ S из Interface Builder, используя чистый Autolayout без какого-либо кода.

Для доказательства концепции сначала удалите любое ограничение в View Controller, если см. это работает.

Это образец макета:

  • Вид (основной вид моего UIViewController)

    • Просмотр прокрутки (UIScrollView)

      • Просмотр контейнера (UIView)

        • Просмотр содержимого (например, UIImageView)

а. Ширина прокрутки/ширина должна быть меньше, чем ширина контейнера/высота

В. Container View должен иметь определенную ширину/высоту (может быть явная ширина/высота)

С. Сделайте Container View для просмотра прокрутки и добавьте только:

  • Ведущее пространство в контейнере
  • Трейлинг пространства в контейнере

Д. Проверьте эти два ограничения и установите "постоянное" значение как для 0

Е. Запустить приложение и

Ответ 5

Из-за новых размеров экрана iPhone 6 и 6+ мне пришлось сделать несколько настроек для решения DJ S.

Цель

Поместите a UITextView внутри a UIScrollView, а также имейте 15 pt пробелы с левого/правого краев экрана.

Просмотры

1. Main View (main view of my UIViewController)
  2. Scroll View (UIScrollView)
     3. Container View (UIView)
       4. Text View (UITextView)

Решение

Для пробелов я добавил 15 pt горизонтальных конечных/ведущих пространств от UIScrollViewMain View. Чтобы сделать ширину UITextView относительно ширины экрана, я добавил ограничение Equal Widths от UITextViewMain View и установил значение -30 (2 * горизонтальное пространство 15 pt). Теперь ширина UITextView будет динамически настраиваться для любого размера экрана.

UIScrollView должен иметь Scrolling Enabled. UITextView должен не.