Нежелательное изменение размера вида при повороте, вызванное UITabBarController

#iphone #uitabbarcontroller

#iPhone #uitabbarcontroller

Вопрос:

У меня есть TabBarController с 4 представлениями. Я хотел, чтобы второй вид вращался, поэтому я добавил

 -(BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation {
     return YES; 
    }
  

для всех моих 4 ViewControllers. Теперь каждый вид может вращаться, и это хорошо.

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

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

Например, у меня есть ScrollView на втором представлении, охватывающий весь экран. Когда я поворачиваю телефон, оставаясь во втором режиме просмотра, он изменяет размер scrollview в соответствии с альбомной ориентацией экрана, все в порядке. Но если я поворачиваю телефон, оставаясь в первом представлении (или в третьем, или в четвертом), вид прокрутки становится маленьким, меньше половины экрана.

Для изменения размера и перерисовки содержимого я использую:

     - (void) willRotateToInterfaceOrientation:(UIInterfaceOrientation)toInterfaceOrientation duration:(NSTimeInterval)duration {
    [self adjustViewsForOrientation:toInterfaceOrientation]; }

    - (void) adjustViewsForOrientation:(UIInterfaceOrientation)orientation {
    if (orientation == UIInterfaceOrientationLandscapeLeft ||
  orientation == UIInterfaceOrientationLandscapeRight) {

  sfondo.frame = CGRectMake(0, 0, 480, 260);
  scrollView.frame = CGRectMake(0, 0, 480, 250); 
  scrollView.contentSize = CGSizeMake(480,1000);
  for (int i=0; i<3; i  ) {
   [[grafici objectAtIndex:i] landscapeMode:TRUE];
  }
 }
    else if (orientation == UIInterfaceOrientationPortrait ||
    orientation == UIInterfaceOrientationPortraitUpsideDown) {

  sfondo.frame = CGRectMake(0, 0, 320, 411);
  scrollView.frame = CGRectMake(0, 0, 320, 411); 
  scrollView.contentSize = CGSizeMake(320,1100);
  for (int i=0; i<3; i  ) {
   [[grafici objectAtIndex:i] landscapeMode:FALSE];
  }    
 }
}
  

Ответ №1:

Я обнаружил, что проблемы возникали из-за того, что я установил свой scrollview и другие параметры из Interface Builder.

Выполнение этого программным путем решило мою проблему!