У меня есть все мои элементы управления, созданные в построителе интерфейса (много ярлыков, кнопок и т.д.). Как поместить их все в представление прокрутки в построителе интерфейса, чтобы у меня было больше места и можно было прокручивать вверх и вниз, чтобы показать больше элементов управления? Должен ли я делать это программно?
Как добавить 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 > Вставить в > Просмотр прокрутки