2013-12-03 50 views
0

我提供了一個UINavigationController與堆棧中的兩個視圖控制器,並首先呈現最後一個視圖控制器。點擊後退按鈕顯然會回到第一個視圖控制器。UINavigationController setViewControllers autorotation issue

navCtrl = [[UINavigationController alloc] init]; 
    ViewController1 *vc1 = [[ViewController1 alloc] init]; 
    ViewController2* vc2 = [[ViewController2 alloc] init]; 

    [navCtrl setViewControllers:[NSArray arrayWithObjects:vc1, vc2, nil] animated:NO]; 
    [self presentViewController:navCtrl animated:YES completion:^{ 
    }]; 

問題是,當我在橫向模式下按導航控制器上的後退按鈕時,視圖控制器vc1幀不正確。該框架是(0,0,320,568)並以橫向模式佈局。我正在運行iOS 7.在按下後退按鈕時不會調用自動轉換代碼。

鑑於,如果我用自然順序vc1,vc2提供導航控制器,我沒有看到任何問題。

編輯:僅供參考,這裏是VC1的-viewWillAppear-viewDidAppear電話:

- (void)viewWillAppear:(BOOL)animated 
{ 
    [super viewWillAppear:animated]; 

    self.navigationController.navigationBar.barStyle = UIBarStyleBlackTranslucent; 

    [[UIApplication sharedApplication] setStatusBarStyle:UIStatusBarStyleBlackTranslucent]; 
    [[UIApplication sharedApplication] setStatusBarHidden:NO 
              withAnimation:UIStatusBarAnimationNone]; 

    [[NSNotificationCenter defaultCenter] addObserver:self 
              selector:@selector(keyboardWillShow:) 
               name:UIKeyboardWillShowNotification 
               object:nil]; 

    [[NSNotificationCenter defaultCenter] addObserver:self selector:@selector(keyboardWillHide:) 
               name:UIKeyboardWillHideNotification 
               object:nil]; 

    NSLog(@"Frame = %@", NSStringFromCGRect(self.view.frame)); 
} 

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

    // Get status bar height if visible 
    if (![UIApplication sharedApplication].statusBarHidden) { 
     CGRect statusBarFrame = [[UIApplication sharedApplication] statusBarFrame]; 
     CGFloat statusBarHeight = MIN(statusBarFrame.size.height, statusBarFrame.size.width); 

     // Set navigation bar frame 
     CGRect navBarFrame = self.navigationController.navigationBar.frame; 

     [self.navigationController setNavigationBarHidden:YES animated:NO]; 
     [self.navigationController setNavigationBarHidden:NO animated:NO]; 
     /* 
     navBarFrame.origin.y = statusBarHeight; 
     self.navigationController.navigationBar.frame = navBarFrame; 
     */ 
     UIEdgeInsets e = UIEdgeInsetsMake(statusBarHeight + navBarFrame.size.height, 0, navBarFrame.size.height + 12, 0); 
     [_tableView setScrollIndicatorInsets:e]; 
     [_tableView setContentInset:e]; 
    } 

    _tableView.rowHeight = 75; 

    self.spinner = [[[UIActivityIndicatorView alloc] initWithActivityIndicatorStyle:UIActivityIndicatorViewStyleWhite] autorelease]; 
    spinner.frame = CGRectMake(145, 200, 30, 30); 
    [self.view addSubview:spinner]; 

    [spinner startAnimating]; 

    [self performSelector:@selector(refreshData) withObject:nil afterDelay:0.f]; 
} 

回答

0

我發現這個問題。對於一些舊的iOS bug解決方法,我不記得我在viewDidLoad中有以下行:

[self.navigationController.view setFrame:[self.navigationController.view bounds]];

0

有你需要在這裏檢查的幾件事情:


你說你已經檢查,但讓安全 - 檢查視圖上的自動調整大小。


您的視圖控制器是否實現了以下方法?

- (NSUInteger)supportedInterfaceOrientations; 

你呈現導航控制器作爲子視圖控制器?如果這樣做,確保下面的方法恢復其默認YES

- (BOOL)shouldAutomaticallyForwardRotationMethods; 

檢查你是不是添加子視圖控制器到UINavigationController的觀點,因爲它不轉發外觀的方法,盡最大努力在導航控制器的視圖控制器內處理該事件。


未按上述所有你應該把斷點在VC1的viewWillAppear,並檢查它的框架,如果框架是正確的,但navigationContoller.view幀不正確,那麼你必須檢查你的自動調整大小面具。

+0

你可以看看我的問題:https://stackoverflow.com/q/45264386/1364053 – Nil

相關問題