2009-10-05 2 views
20

У меня есть все мои элементы управления, расположенные в построителе интерфейса (много меток, кнопок и т. Д.). Как поместить их все в представление прокрутки в построителе интерфейса, чтобы у меня было больше места и можно было прокручивать вверх и вниз, чтобы показать больше элементов управления? Должен ли я делать это программно?Как добавить UIScrollView в конструктор интерфейса?

ответ

30

Открыть представление, имеющее все элементы управления и метки, и т. Д. (В Interface Builder). Выбрать все. Затем в меню «Редактор» выберите «Вставить вход», затем «Прокрутить список».

Примечание: в старых версиях Xcode это находится в меню Layout, затем Embed Objects In ... (просмотр прокрутки).

+0

Marc W бить меня к нему. – mahboudz

+2

Это не работает должным образом. Теперь все находится под UIScrollView, но когда я загружаю приложение, ничто не прокручивается. Зачем? – erotsppa

+10

В IB убедитесь, что scrollview достаточно мал, поэтому все это видно в представлении, когда приложение запускается. Другими словами, его границы/рамки должны быть меньше или равны представлению, в котором он находится. Затем в вашем приложении вам необходимо установить размер прокрутки scrollview.contentSize = всех кнопок, меток и т. Д. Это будет больше, чем рамки/рамки, которые вы задали для scrollview. Если все сделано правильно, вы должны иметь возможность прокручивать без каких-либо других работ с вашей стороны. – mahboudz

3

Выберите все объекты, которые вы хотите поместить в прокрутку, и перейдите в меню «Макет», выберите «Вставить объекты в» и выберите «Прокрутить список».

25

Мое предпочтительное решение, когда вам не нужен жестко прописать размер contentSize:


NB: Вы могли бы быть в состоянии избежать исходного кода части этого, используя трюк здесь : https://stackoverflow.com/a/11239123/153422 - хотя я еще не пробовал.

Остальная часть этого трюка ... вам все еще нужно использовать в любом случае


  1. Переместить все элементы управления в единый UIView (в IB: выбрать все, затем Layout> Вставить объекты в. ..> Просмотр)

  2. Hookup, что однократное UIView к исходному коду, используя свойство IBOutlet (смотри ниже)

  3. в исходном коде, НЕ Interface Builder (IB является здесь он имеет ошибки, где неправильно задает источник UIScrollView - он пытается центрировать представление. Apple никогда не потрудилась проверить его на наличие основных ошибок, вздох): Переместите одиночный UIView в UIScrollView (см. Код ниже).

  4. Используйте sizeThatFits, чтобы «автоматически» установить правильный размер.

Код (StackOverflow не позволит мне поместить код внутри нумерованного списка Вздох.)

Заголовочный файл:

/** outlet that you hook up to the view created in step 1 */ 
@property(nonatomic, retain) IBOutlet UIView *masterView; 

Class файла:

/** inside your viewDidLoad method */ 
[scrollview addSubview: masterView]; // step 3 
scrollView.contentSize = [masterView sizeThatFits:CGSizeZero]; // step 4 

.. . Хотя я еще не проверил это недавно, IIRC работает как на 2.x, так и 3.x

+0

Это решение отлично работает. Спасибо за сообщение – JoshHighland

+0

Это также отлично работает на 4.x - я все еще использую его в приложениях без проблем. – Adam

+0

это работает на iOS 4.2 на IPhone. Не забывайте, что высота UIScrollView должна быть одинаковой или равной UIView верхнего уровня для ViewController. Я возился с настройками и забыл изменить это. Смущенно, казалось, все еще подпрыгивает до неправильного положения. –

4

Его легко:

Сначала добавьте прокрутку к вашему виду. Измените размер прокрутки (например, сделайте его длиной 700 пикселей). Начните вводить элементы управления Когда вы хотите поместить/отредактировать элементы управления в нижней (невидимой) части, выберите прокрутку и измените положение Y-start на -300. Voila. После редактирования установите позицию Y-start назад на 0 или что бы это ни было.

+0

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

+0

Если вы это сделаете, вы также должны вручную (повторно) установить размер кадра «прокрутка» в размере вида страницы (портал просмотра) И установите «contentSize» в общий размер контента. По умолчанию значение по умолчанию равно 0,0, а если contentSize не больше frame.size, то прокрутки не произойдет. Это хорошая дополнительная стратегия наряду с двумя другими, так что спасибо! –

1

Хотя этот вопрос очень старый, я предложить обходной путь я нашел, как я был один и тот же вопрос и не был в состоянии найти большую помощь там:

Когда в IB, если вы хотите разместить объекты вне 420 пикселей, просто убедитесь, что выбрали Unspecified для всех Строка состояния, Верхняя панель и Нижняя панель для представления, содержащего вид прокрутки со всеми объектами. Таким образом, вы сможете вручную изменить размер экрана (для представления). Затем вы можете обратиться за советом Ximonn о изменении размера значения для прокрутки, имеющего доступ ко всем остальным объектам, работающим с ними, а затем, отменив изменения для значения H, а затем установите необходимые бары.

0

Я искал это в течение нескольких дней, и я, наконец, наткнулся на этот сайт с решением, которое сработало для меня.

Scrolling with UIScrollView

В основном у вас есть основной вид с объектом UIScrollView в нем. Затем еще один контент со всем содержимым. Затем вы добавляете представление содержимого в представление прокрутки. И затем, наконец, установите размер размера содержимого scrollview в размере представления содержимого.

1

Важная мелочь. Для прокрутки большого подзаголовка (например, UIImageView) в UIScrollView помните, что для этого подсмотра снимите флажок «Взаимодействие с пользователем» в окне InterfaceBuilder -> View. Или сделать это программно.

subview.userInteractionEnabled = NO; 

В противном случае этот подъярус будет стекать на экран без какого-либо эффекта.

0

Я знаю, эта тема немного старше ... Но кто-то мог найти ее в google, она была высоко оценена. я написал этот маленький вспомогательный метод, чтобы получить работу:

- (void)addSubview:(UIView *)theSubView toScrollView:(UIScrollView *)theScrollView 
{ 
    [theScrollView addSubview:theSubView]; 
    theScrollView.contentSize = theSubView.bounds.size; 
} 

Вы просто должны объявить два IBOutlet находится в заголовке (например contentView и scrollView) и вызвать метод, как это, где бы вы хотите загрузить UIView в UIScrollView с вашим исходным кодом:

[self addSubview:contentView toScrollView:scrollView];

Я назвал его в viewDidLoad

Этого метод FEA tures iOS

4

Я не знаю, был ли это только я, но я старался следовать инструкциям в каждом из других ответов здесь, и никто из них не работал. Ни один из ответов не включал все необходимое, каждый из которых, я предполагаю, что мы знаем, что делаем что-то, оставляя эту часть. Я, наконец, понял это с помощью red artisan. Итак ... Я перечисляю здесь все необходимые шаги, чтобы получить эту работу:

  1. В InterfaceBuilder, добавьте View, а затем добавить элементы управления к нему (или если ваши элементы управления уже существуют в главном представлении, вы можете выбрать все свои элементы управления, а затем перейти к редактору | Вставить в | Вид, а затем перетащить этот новый вид, чтобы он сам был вне основного вида). Этот вид может быть любого размера, который вам нравится.

  2. В InterfaceBuilder добавьте вид прокрутки к основному виду и поместите его на весь основной вид.

  3. Добавьте приведенный ниже код в файлы заголовков и классов UIViewController.

  4. В InterfaceBuilder подключите View, содержащий ваши элементы управления, в ContentView в Владелец файла. Подключите Scroll View к 'scrollView' в Владелец файла.

Заголовочный файл:

 
    @interface MyViewController : UIViewController 
    @property(nonatomic, retain) IBOutlet UIScrollView *scrollView; 
    @property(nonatomic, retain) IBOutlet UIView *contentView; 

Класс файла:

 
    @synthesize scrollView, contentView; 

    - (void)viewDidLoad 
    { 
     [super viewDidLoad];  
     [self.scrollView addSubview:self.contentView]; 
     self.scrollView.contentSize = self.contentView.bounds.size; 
    } 

    - (void)viewDidUnload 
    { 
     self.scrollView = nil; 
     self.contentView = nil; 
     [super viewDidUnload]; 
    } 
0

Выбранный ответ хорошо работает для Xcode 3.

Однако для Xcode 4, меню были повторно - слегка пристегнуто.

Чтобы сделать то же самое в Xcode 4 выберите ваши взгляды затем использовать:

Editor> Вставить в> Scroll View