Очень странная проблема ориентации iOS с Three20

Это одна из самых странных проблем с разработкой iOS, которую я когда-либо видел. Я относительно новичок в разработке для iOS, поэтому я прошу прощения, если я упустил что-то очевидное или моя терминология не совсем верна. Если вам нужны разъяснения, пожалуйста, дайте мне знать в комментариях, и я соответствующим образом отредактирую свой вопрос.

Эта проблема

Я использую Three20, так что это может быть как-то связано с этим. Но у меня есть "Домашний вид", который представляет собой серию изображений, которые связаны с другими видами (как показано на рисунке ниже). Если я начну нашу в портретном виде, все хорошо.

Следующее представление является представлением таблицы, показанным ниже:

УРА! Я могу вращаться, и с миром все в порядке. НО, если я вернусь к этому домашнему виду, поверну к ландшафту, и ТО перейду к этому табличному виду, мир разрушится.

Вы увидите, что к правой стороне моего стола добавлено случайное пространство. Я не знаю, откуда и как это произошло. Вот мой Controller.m файл:

#import "FriendTabsController.h"
#import "MyAppApp.h"
#import "JohnDoeManager.h"

@implementation FriendTabsController

@synthesize innerView, segmentedControl, innerController, friendsController, friendRequestsController;

- (void)addBottomGutter:(UIViewController*)controller {
  if ([controller isKindOfClass:[TTTableViewController class]]) {
    TTTableViewController* tableViewController = (TTTableViewController*)controller;
    tableViewController.tableView.scrollIndicatorInsets = UIEdgeInsetsMake(0,0,50+44,0);
    tableViewController.tableView.contentInset = UIEdgeInsetsMake(0,0,50+44,0);
  }
}

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

// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
  [super viewDidLoad];

  self.title = @"Friends";
  self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque;
  self.navigationController.navigationBar.tintColor = nil;


  friendsController = [[FriendsController alloc] init];
  friendRequestsController = [[FriendsController alloc] init];
  ((FriendsController*)friendRequestsController).friendRequests = YES;

  [self addBottomGutter:friendsController];
  [self addBottomGutter:friendRequestsController];

  innerController = friendsController;
  [innerView addSubview:innerController.view];
  [innerController viewDidLoad];

    UIInterfaceOrientation orientation = [UIApplication sharedApplication].statusBarOrientation;
    [self loadBannerAd:(orientation)];

}
-(void) loadBannerAd:(UIInterfaceOrientation)orientation{ 

  MainLayer *mi = [MainLayer getInstance];
    if (mi.useJohnDoeAds) {
    [[JohnDoeManager sharedInstance] setCurrentViewController:self];
    [mi.JohnDoeBanner.view removeFromSuperview];

        if(orientation == UIInterfaceOrientationPortrait || orientation == UIInterfaceOrientationPortraitUpsideDown) {
            // This is a portait ad
            if ([[MyAppUtils getCurrentDevice] isEqualToString:@"iphone"]) {
                [mi.JohnDoeBanner setFrame:CGRectMake(0, 410-44, 320, 50)];
            }else{
                [mi.JohnDoeBanner setFrame:CGRectMake(0, 1024-44-90-20, 768, 90)];
            }                
        } else {
            // Landscape
            if ([[MyAppUtils getCurrentDevice] isEqualToString:@"iphone"]) {
                [mi.JohnDoeBanner setFrame:CGRectMake(0, 320-44-58, 410, 50)];
            }else{
                [mi.JohnDoeBanner setFrame:CGRectMake((1024-768)/2, 768-44-90-20, 768, 90)];
            }              
        }

        [self.view addSubview:mi.JohnDoeBanner.view];
          [mi.JohnDoeBanner rollOver];           
  }
}

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


- (IBAction)didChangeSegment:(UISegmentedControl *)control {
  if (innerController) {
    [innerController viewWillDisappear:NO];
    [innerController.view removeFromSuperview];
    [innerController viewDidDisappear:NO];
  }

  switch (control.selectedSegmentIndex) {
    case 0:
      innerController = friendsController;
      self.title = @"Friends";

      break;
    case 1:
      innerController = friendRequestsController;
      self.title = @"Requests";

      break;
  }
  [innerController viewWillAppear:NO];
  [innerView addSubview:innerController.view];
  [innerController viewDidAppear:NO]; 
}

- (void)viewWillAppear:(BOOL)animated {
  [super viewWillAppear:animated];
  [innerController viewWillAppear:animated];
  self.navigationController.navigationBar.barStyle = UIBarStyleBlackOpaque;
  self.navigationController.navigationBar.tintColor = nil;
}

- (void)viewDidAppear:(BOOL)animated {
  [super viewDidAppear:animated];
  [innerController viewDidAppear:animated];
}

- (void)viewWillDisappear:(BOOL)animated {
  [innerController viewWillDisappear:animated];
  [super viewWillDisappear:animated];
}

- (void)viewDidDisappear:(BOOL)animated {
  [innerController viewDidDisappear:animated];
  [super viewDidDisappear:animated];
}

- (void)didReceiveMemoryWarning {
  [super didReceiveMemoryWarning];
}

- (void)viewDidUnload {
  [friendsController release], friendsController = nil;
  [friendRequestsController release], friendRequestsController = nil;
  [super viewDidUnload];
}

- (void)dealloc {
  [super dealloc];
}


@end

Так может кто-нибудь, пожалуйста, скажите мне, что происходит? ПОМОГИТЕ!

1 ответ

Решение

Вам нужно установить свойство wantFullScreenLayout в YES.

в вашем наборе методов инициализации

self.wantsFullScreenLayout = YES;

Это решит вашу проблему.

Другие вопросы по тегам