2013-04-11 2 views
2

У меня есть UIScrollView, чтобы отобразить более длинный список текстовых просмотров, полей и изображений. В viewDidAppear я правильно установил contentSize, и я также добавлю этот код в didRotateFromInterfaceOrientation, так что размер содержимого контента UIScrollView изменяется в зависимости от ориентации.UIScrollView не работает, когда просмотр начинается, но работает после вращения

Проблема в том, что когда сначала появляется представление, UIScrollView не отвечает (я не могу прокручивать), но после поворота устройства вызывается код в didRotateFromInterfaceOrientation и все работает отлично. (Если я запустил приложение в альбомной ориентации, я могу немного прокрутить, чтобы увидеть, что обычно отображается в портретном режиме, а не расширенное содержимое - игнорирует определенный мной scrollView)

Код тот же в viewDidAppear и didRotateFromInterfaceOrientation, так почему же scrollView реагировать только после вращения? Любая помощь оценивается.

Вывод сообщений NSLog в обоих методах одинаковый.

@property (weak, nonatomic) IBOutlet UIScrollView *scrollView; 


- (void) viewDidAppear:(BOOL)animated{ 
    //If not an iPad set the scrollview to allow scrolling of view 
    if (!([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)) { 
     self.scrollView.contentSize= CGSizeMake(self.view.frame.size.width,1000); 
     [self.scrollView setUserInteractionEnabled:YES]; 
    } 
    if(self.scrollView.userInteractionEnabled){ 
    NSLog(@"DEBUG scrollview height : %f",self.scrollView.contentSize.height); 
    NSLog(@"DEBUG scrollview width : %f",self.scrollView.contentSize.width);  
    } 
} 

-(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation{ 
//If not an iPad set the scrollview 

    if (!([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)) { 
     self.scrollView.contentSize= CGSizeMake(self.view.frame.size.width,1000); 
    } 
    if(self.scrollView.userInteractionEnabled){ 
     NSLog(@"DEBUG scrollview height : %f",self.scrollView.contentSize.height); 
     NSLog(@"DEBUG scrollview width : %f",self.scrollView.contentSize.width); 
    } 
} 
+1

Вы забыли называть '[super ...]' методы! – Cyrille

+1

И вам лучше изменить 'contentSize' в' viewDidLayoutSubviews', который вызывается при появлении * и * при изменении ориентации. – Cyrille

+0

Спасибо - viewDidLayoutSubviews решила проблему. – greentor

ответ

3

Вы бы лучше изменить contentSize в viewDidLayoutSubviews, который вызывается, когда появляются и при изменении ориентации.

Но не забудьте позвонить по телефону super сперва!

1

Hey Пожалуйста, попробуйте этот код Я думаю, что ваша проблема возникает, используя этот код.

Метод tryRotate при выборе ориентации устройства - это пейзаж или портрет. и на основе этого установите рамку.

- (void)viewDidAppear:(BOOL)animated {  
     if (!([[UIDevice currentDevice] userInterfaceIdiom] == UIUserInterfaceIdiomPad)) { 
      self.scrollView.contentSize= CGSizeMake(self.view.frame.size.width,1000); 
      [self.scrollView setUserInteractionEnabled:YES]; 
     } else { 
      [_scrollView setScrollEnabled:YES]; 
      _scrollView.contentSize = CGSizeMake(_scrollView.frame.size.width, 2320); 
     } 
     if(self.scrollView.userInteractionEnabled){ 
      NSLog(@"DEBUG scrollview height : %f",self.scrollView.contentSize.height); 
      NSLog(@"DEBUG scrollview width : %f",self.scrollView.contentSize.width); 
     } } 

    -(void) didRotateFromInterfaceOrientation:(UIInterfaceOrientation)fromInterfaceOrientation 
    { 
     if (fromInterfaceOrientation == UIInterfaceOrientationLandscapeLeft || fromInterfaceOrientation == UIInterfaceOrientationLandscapeRight) { 
      [_scrollView setContentSize:CGSizeMake(736, 1000)]; 

     } else { 
      [_scrollView setContentSize:CGSizeMake(414 , 1200)]; 

     } 
    } 

Счастливое кодирование.

+1

Лучше объяснить, что такое изменение и почему, а не просто указывать код. – api55

+0

Спасибо за ваше предложение. В следующий раз я постараюсь. –

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