Как настроить UIScrollView в Interface Builder с элементами пользовательского интерфейса за пределами основного представления iPhone?

Я создаю форму ввода данных в своем приложении для iPhone, и здесь больше полей данных, чем умещается на экране. Я решил, что нужно поместить их в UIScrollView, чтобы пользователь мог прокручивать форму. Как лучше всего построить это в Интерфейсном Разработчике? Я знаю, что могу сделать это программно, но я бы хотел сделать это в Interface Builder, если смогу. Проблема в том, как я могу разместить UILabels, UITextFields и т. Д., Если они выходят за пределы основного экрана iPhone - в той части экрана, для которой UIScrollView становится полезным?


person Jason    schedule 11.08.2010    source источник


Ответы (7)


Дважды щелкните, чтобы открыть сам UIScrollView в IB, и увеличьте размер до нужного или большего размера (вы всегда можете уменьшить его во время выполнения). Затем просто добавьте элементы.

РЕДАКТИРОВАТЬ: не работает - вместо этого см. здесь.

person jrtc27    schedule 11.08.2010

Лучшее решение, которое я нашел для этой проблемы (которое я считаю неудобным для Interface Builder), заключается в следующем:

  1. поместите «контейнер» UIView внутри UIScrollView, установите размер контейнера UIView на необходимый (например, 320 x 1200) с помощью инспектора и добавьте свой контент в это представление контейнера. (ваши кнопки, текстовые поля и т. д.).
  2. установите в коде contentSize для UIScrollView таким же, как размер вашего контейнера UIView. где-нибудь, например, в viewDidLoad (например, scrollView.contentSize = containerView.frame.size;)
  3. Чтобы изменить содержимое за пределами представления прокрутки в Интерфейсном Разработчике, вам нужно каждый раз перетаскивать представление контейнера за пределы представления прокрутки, вносить изменения, затем перетаскивать представление контейнера обратно в UIScrollView и строить.
person user637394    schedule 03.05.2012
comment
это ответило на вопрос для меня. Вы не можете размещать свои подпредставления непосредственно под UIScrollView. У вас должен быть UIView внутри UIScrollView в качестве контейнера для всех ваших Subviews (я знаю, что это немного глупо). - person jimbob; 12.11.2013
comment
Такой подход избавил меня от многих проблем. Основной урок - ›если вы планируете использовать интерфейс xib для разработки содержимого вашего scrollview, лучше сделать это в отдельном uiview, затем программно добавить его в ваш scrollview в целом, а затем установить размер содержимого. - person Teffi; 21.07.2014

На самом деле это просто:

  1. Создайте новый класс контроллера представления, например. MyScrollViewController

  2. Создайте новый xib с UIScrollView в качестве самого верхнего представления и установите для класса владельца файла значение MyScrollView Controller.

  3. Установите атрибут представления владельца файла на просмотр прокрутки

  4. Перетащите нижнюю часть прокрутки, чтобы создать желаемый размер.

  5. Разместите различные другие элементы пользовательского интерфейса в качестве подвидов прокрутки.

  6. Создайте и подключите IBOutlet в MyScrollViewController.h для просмотра прокрутки, например

    @property (retain, nonatomic) IBOutlet UIScrollView *scrollView;
    
  7. В методе viewDidLoad MyScrollViewController добавьте следующую строку кода:

    self.scrollView.contentSize = self.scrollView.frame.size;
    

Э-э-э-это все, ребята!

person northernman    schedule 31.12.2011
comment
У меня это сработало в портретном режиме, но не когда я повернул его в альбомный. Я использовал эту строку вместо self.scrollView.contentSize = CGSizeMake (self.view.bounds.size.width, 600.0f); Если высота немного больше, чем содержимое в просмотре прокрутки. - person JScarry; 28.09.2012

Настройте «Вставки содержимого» для «Размер прокрутки» в «Инспекторе размеров»: Bottom = YourFrameHeight - ScreenHeight. Это позволит вам прокручивать диапазоны сверху вниз и снизу вниз вашего UIScrollView.

person MikeR    schedule 16.11.2011

У меня тоже была такая же проблема. В итоге я поместил в него еще один UIView и установил высоту, которую хотел. Затем я помещаю в него все элементы пользовательского интерфейса. Это позволяет перетаскивать внутренний вид вверх и вниз.

person Matt Williamson    schedule 11.08.2010

То, что сработало для меня в xCode5 (без раскадровки, с использованием автолайпа), использует ответ из 7 шагов над концом со словами «Th-th-th-это все, ребята!» и добавляем два шага.

8) Перетащите новый UIView в конструктор интерфейса. Не в режиме прокрутки. Само по себе. Поместите в него все свои элементы управления / вид и сделайте его настолько большим, насколько хотите. Я подключил это представление как contentView.

@property (слабый, неатомарный) IBOutlet UIView * contentView;

9) Затем в - (void) viewDidLoad

[self.mainScrollView addSubview: self.contentView]; [self.mainScrollView setContentSize: CGSizeMake (self.contentView.frame.size.width, self.contentView.frame.size.height)];

Просто сказав, что это помогло мне.

person Jeff    schedule 18.06.2014

Наконец-то есть разумное решение для всего этого - разместить контейнерное представление внутри UIScrollView. Поскольку Interface Builder отображает UIViewController внутри представления контейнера отдельно, вы, наконец, можете увидеть, как будет выглядеть ваш контент UIScrollView, не скрещивая пальцы и не вставая на голову.

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

person arcady bob    schedule 20.07.2016