2013-11-13 5 views
2

Я включил ScrollView в одну из моих сцен в раскадровке моего приложения. Теперь я очень незнакома со многими вещами в iOS, и мне только что удалось создать полосу прокрутки на сцене. Проблема в том, что, хотя появляется полоса прокрутки, она не просматривает содержимое.iOS - Полоса прокрутки Scrollview отображается, но не прокручивает содержимое

я создал Scrollview в моем AppRequestViewController.h и AppRequestViewController.m:

AppRequestViewController.h

@interface AppRequestViewController : UIViewController 
@property (weak, nonatomic) IBOutlet UIScrollView *scrollView; 

AppRequestViewController.m

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    self.scrollView.contentSize=CGSizeMake(320,1000); 

} 

Вот моя точка зрения иерархии:

enter image description here

Сцена в раскадровке:

enter image description here

Полоса прокрутки в тренажере, который показывает вверх, но не совсем работа:

enter image description here

Может кто-нибудь сказать мне, где я пошел неправильно? Благодарю.

ответ

3

Установка Scrollview для раскадровки в прошивке может быть немного запутанным. Настройка ScrollView в моем вопросе верна, но есть несколько ошибок, из-за которых программа работает иначе, чем ожидалось.

Во-первых, исправление, которое я нашел, это снять флажок «Установить автозапуск» в «Инспекторе файлов». Второй исправляет иерархию View. Чтобы проверить мое исправление, я изменил содержимое сцены на более простой: с View, ScrollView, вложенным представлением и двумя кнопками. Вот новая Просмотр иерархии:

enter image description here

ScrollView находится на вершине иерархии View после основного вида. Затем я поместил другой объект View для просмотра других объектов View.Причина, по которой моя программа не работала в первую очередь, состоит в том, что ScrollView находится на том же уровне, что и другие объекты, поэтому он не может прокручивать содержимое.

Я также добавил дополнительные настройки в методе viewDidLoad в AppRequestViewController.m:

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    [self.navigationController setNavigationBarHidden:YES]; 
    [self.scrollView setScrollEnabled:YES]; 
    self.scrollView.contentSize=CGSizeMake(320,800); 

} 

Настройка ScrollView довольно просто, но это может привести к путанице. Я исправил свою программу на основе этого YouTube tutorial. Надеюсь это поможет.

+0

Работает для меня .. Спасибо :) –

0

Кажется, что вид прокрутки превышает экран. вы устанавливаете свойство прокрутки autoResizesSubviews как true и autoresizingMask как UIViewAutoresizingFlexibleWidth| UIViewAutoresizingFlexibleWidth. Если вы используете auto layout, перейдите к настройке соответствующих ограничений.

0

Прокручиваемое содержимое должно быть просмотром прокрутки. вам сначала нужно проверить иерархию представлений. После этого вы можете использовать приведенный ниже код, чтобы сравнить размер и размер содержимого в ViewController.

- (void)viewWillLayoutSubviews 
{ 
    NSLog(@"scrollview size : %@", NSStringFromCGSize(self.scrollView.frame.size)); 
    NSLog(@"content size : %@", NSStringFromCGSize(self.scrollView.contentSize)); 
} 

Размер содержимого должен быть больше, чем размер рамки прокрутки.

1

Я угадываю, setContentSize: внутри viewWillAppear: или viewDidAppear: исправят вашу проблему.

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

// relocate this line 
// self.scrollView.contentSize=CGSizeMake(320,1000); 

} 

...

- (void)viewWillAppear:(BOOL) animated 
{ 
    [super viewWillAppear:animated]; 
    self.scrollView.contentSize=CGSizeMake(320,1000); 

} 
0

Использовать viewDidAppear вместо viewDidLoad. Это определенно сработает.

(void)viewDidAppear:(BOOL)animated 
{ 
    [super viewDidAppear:animated]; 
    [self.scrollView setContentSize:CGSizeMake(...)]; 
} 
0

Ваш размер контента подходит для просмотра прокрутки, но проверьте размер контроллера вида в раскадровке. Задайте моделируемый размер контроллера вида от свободы до фиксированного. Я думаю, что это поможет вам решить вашу проблему.

Смежные вопросы