2012-04-27 78 views
0

这是我见过的iOS开发中最奇怪的问题之一。我对iOS开发相对比较陌生,所以我很抱歉如果我错过了某些明显的东西,或者我的术语不完全正确。如果您需要澄清,请在评论中告诉我,我将相应地编辑我的问题。Three20很奇怪的iOS方向问题

的问题

我使用Three20,所以可能有一些用它做。但我有一个“主页视图”,它基本上是一系列链接到其他视图的图像(如下图所示)。如果我从肖像视角开始,一切都很好。

enter image description here

下一个视图是表图,如下图所示:

enter image description here

YAY!我可以旋转,一切都与世界正确。 但是如果我回到主视图,旋转到横向,然后转到这个表格视图,世界就会崩溃。

enter image description here

你会看到,现在有添加到我的表的右侧随机空间。我不知道它来自何处和如何。这里是我的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 

那么有人可以告诉我发生了什么事吗?帮帮我!

回答

2

您需要将wantsFullScreenLayout属性设置为YES。

在你的init方法设置

self.wantsFullScreenLayout = YES; 

这将解决您的问题。