Как добавить UIScrollView в конструктор интерфейса?

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

Ответ 1

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

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

Ответ 2

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


NB: вы можете избежать части кода исходного кода, используя трюк здесь: fooobar.com/questions/60660/... - хотя я еще не пробовал.

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


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

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

  • В ИСТОЧНИЧНОМ КОДЕ, НЕ ИНТЕРФЕЙС-СТРОИТЕЛЕ (ИБ здесь не работает, у него есть ошибки, где он неправильно задает происхождение UIScrollView - он пытается центрировать представление. Apple никогда не потрудилась проверить его на основные ошибки, вздох ): Переместите одиночный UIView в UIScrollView (см. Код ниже).

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

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

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

/** 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

Ответ 3

Легко:

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

Ответ 4

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

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

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

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

  • В InterfaceBuilder подключите View, содержащий ваши элементы управления, к ContentView в File Owner. Подключите просмотр прокрутки к "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];
    }

Ответ 5

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

Ответ 6

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

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

Ответ 7

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

subview.userInteractionEnabled = NO;

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

Ответ 8

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

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

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

Ответ 9

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

Ответ 10

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

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

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

Редактоp > Вставить в > Просмотр прокрутки