У меня есть все мои элементы управления, расположенные в построителе интерфейса (много меток, кнопок и т. Д.). Как поместить их все в представление прокрутки в построителе интерфейса, чтобы у меня было больше места и можно было прокручивать вверх и вниз, чтобы показать больше элементов управления? Должен ли я делать это программно?Как добавить UIScrollView в конструктор интерфейса?
ответ
Открыть представление, имеющее все элементы управления и метки, и т. Д. (В Interface Builder). Выбрать все. Затем в меню «Редактор» выберите «Вставить вход», затем «Прокрутить список».
Примечание: в старых версиях Xcode это находится в меню Layout, затем Embed Objects In ... (просмотр прокрутки).
Выберите все объекты, которые вы хотите поместить в прокрутку, и перейдите в меню «Макет», выберите «Вставить объекты в» и выберите «Прокрутить список».
Мое предпочтительное решение, когда вам не нужен жестко прописать размер contentSize:
NB: Вы могли бы быть в состоянии избежать исходного кода части этого, используя трюк здесь : https://stackoverflow.com/a/11239123/153422 - хотя я еще не пробовал.
Остальная часть этого трюка ... вам все еще нужно использовать в любом случае
Переместить все элементы управления в единый UIView (в IB: выбрать все, затем Layout> Вставить объекты в. ..> Просмотр)
Hookup, что однократное UIView к исходному коду, используя свойство IBOutlet (смотри ниже)
в исходном коде, НЕ Interface Builder (IB является здесь он имеет ошибки, где неправильно задает источник UIScrollView - он пытается центрировать представление. Apple никогда не потрудилась проверить его на наличие основных ошибок, вздох): Переместите одиночный UIView в UIScrollView (см. Код ниже).
Используйте 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
Это решение отлично работает. Спасибо за сообщение – JoshHighland
Это также отлично работает на 4.x - я все еще использую его в приложениях без проблем. – Adam
это работает на iOS 4.2 на IPhone. Не забывайте, что высота UIScrollView должна быть одинаковой или равной UIView верхнего уровня для ViewController. Я возился с настройками и забыл изменить это. Смущенно, казалось, все еще подпрыгивает до неправильного положения. –
Его легко:
Сначала добавьте прокрутку к вашему виду. Измените размер прокрутки (например, сделайте его длиной 700 пикселей). Начните вводить элементы управления Когда вы хотите поместить/отредактировать элементы управления в нижней (невидимой) части, выберите прокрутку и измените положение Y-start на -300. Voila. После редактирования установите позицию Y-start назад на 0 или что бы это ни было.
Кроме того, вы можете просто увеличить размер, а затем уменьшить его снова.Прокрутка была бы приятной, но я не удивлен, что она не реализована. – Casebash
Если вы это сделаете, вы также должны вручную (повторно) установить размер кадра «прокрутка» в размере вида страницы (портал просмотра) И установите «contentSize» в общий размер контента. По умолчанию значение по умолчанию равно 0,0, а если contentSize не больше frame.size, то прокрутки не произойдет. Это хорошая дополнительная стратегия наряду с двумя другими, так что спасибо! –
Хотя этот вопрос очень старый, я предложить обходной путь я нашел, как я был один и тот же вопрос и не был в состоянии найти большую помощь там:
Когда в IB, если вы хотите разместить объекты вне 420 пикселей, просто убедитесь, что выбрали Unspecified для всех Строка состояния, Верхняя панель и Нижняя панель для представления, содержащего вид прокрутки со всеми объектами. Таким образом, вы сможете вручную изменить размер экрана (для представления). Затем вы можете обратиться за советом Ximonn о изменении размера значения для прокрутки, имеющего доступ ко всем остальным объектам, работающим с ними, а затем, отменив изменения для значения H, а затем установите необходимые бары.
Я искал это в течение нескольких дней, и я, наконец, наткнулся на этот сайт с решением, которое сработало для меня.
В основном у вас есть основной вид с объектом UIScrollView в нем. Затем еще один контент со всем содержимым. Затем вы добавляете представление содержимого в представление прокрутки. И затем, наконец, установите размер размера содержимого scrollview в размере представления содержимого.
Важная мелочь. Для прокрутки большого подзаголовка (например, UIImageView) в UIScrollView помните, что для этого подсмотра снимите флажок «Взаимодействие с пользователем» в окне InterfaceBuilder -> View. Или сделать это программно.
subview.userInteractionEnabled = NO;
В противном случае этот подъярус будет стекать на экран без какого-либо эффекта.
Я знаю, эта тема немного старше ... Но кто-то мог найти ее в 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
Я не знаю, был ли это только я, но я старался следовать инструкциям в каждом из других ответов здесь, и никто из них не работал. Ни один из ответов не включал все необходимое, каждый из которых, я предполагаю, что мы знаем, что делаем что-то, оставляя эту часть. Я, наконец, понял это с помощью red artisan. Итак ... Я перечисляю здесь все необходимые шаги, чтобы получить эту работу:
В InterfaceBuilder, добавьте View, а затем добавить элементы управления к нему (или если ваши элементы управления уже существуют в главном представлении, вы можете выбрать все свои элементы управления, а затем перейти к редактору | Вставить в | Вид, а затем перетащить этот новый вид, чтобы он сам был вне основного вида). Этот вид может быть любого размера, который вам нравится.
В InterfaceBuilder добавьте вид прокрутки к основному виду и поместите его на весь основной вид.
Добавьте приведенный ниже код в файлы заголовков и классов UIViewController.
В 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]; }
Выбранный ответ хорошо работает для Xcode 3.
Однако для Xcode 4, меню были повторно - слегка пристегнуто.
Чтобы сделать то же самое в Xcode 4 выберите ваши взгляды затем использовать:
Editor> Вставить в> Scroll View
Marc W бить меня к нему. – mahboudz
Это не работает должным образом. Теперь все находится под UIScrollView, но когда я загружаю приложение, ничто не прокручивается. Зачем? – erotsppa
В IB убедитесь, что scrollview достаточно мал, поэтому все это видно в представлении, когда приложение запускается. Другими словами, его границы/рамки должны быть меньше или равны представлению, в котором он находится. Затем в вашем приложении вам необходимо установить размер прокрутки scrollview.contentSize = всех кнопок, меток и т. Д. Это будет больше, чем рамки/рамки, которые вы задали для scrollview. Если все сделано правильно, вы должны иметь возможность прокручивать без каких-либо других работ с вашей стороны. – mahboudz