2012-04-27 101 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; 

這將解決您的問題。