Как добавить UIScrollView в Интерфейсный конструктор? - PullRequest
20 голосов
/ 05 октября 2009

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

Ответы [ 10 ]

30 голосов
/ 05 октября 2009

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

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

25 голосов
/ 12 декабря 2009

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


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

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


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

  2. Подключите этот единственный UIView к вашему исходному коду с помощью свойства IBOutlet (см. Ниже)

  3. В КОДЕ ИСТОЧНИКА, НЕ ВСТРОЕННЫЙ ИНТЕРФЕЙС (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;

Файл класса:

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

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

4 голосов
/ 17 апреля 2012

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

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

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

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

  4. В InterfaceBuilder подключите View, содержащий ваши элементы управления, к «contentView» в владельце файла. Подключите представление прокрутки к 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];
    }
4 голосов
/ 16 декабря 2009

Легко:

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

3 голосов
/ 05 октября 2009

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

1 голос
/ 28 августа 2011

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

subview.userInteractionEnabled = NO;

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

1 голос
/ 30 апреля 2011

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

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

0 голосов
/ 07 января 2013

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

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

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

Редактор> Встроить> Вид прокрутки

0 голосов
/ 13 марта 2012

Я знаю, эта ветка немного старше ... Но кто-то может найти ее в 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

Этот метод поддерживает iOS

0 голосов
/ 21 июля 2011

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

Прокрутка с помощью UIScrollView

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

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