2012-11-08 45 views
5

可能重複:
「Incorrect」 frame/window size after re-orientation in iPhoneiOS 6的旋轉錯誤:窗口和根視圖控制器框架不會盡管轉動而改變

我試圖解決一個非常令人沮喪的問題與應用我在研究它時可能發現了iOS中的一個錯誤:

當您旋轉iPad時,視圖會旋轉,但它的框架不會更改。我正在運行一個計時器,它每秒都會打印出我的視圖的寬度和高度,雖然我可以看到視圖以可視方式旋轉,但無論如何,框架仍然保持「768x1024」。

從蘋果的文檔:

當用戶界面旋轉,調整窗口大小以匹配新的方向。該窗口調整其根視圖控制器的框架以匹配新的大小,並且該大小反過來沿着視圖層次傳播到其他視圖。

這正是沒有發生的事情,它給我帶來了各種麻煩。有誰知道如何修復旋轉,使框架更改?

重現步驟:

  1. 創建一個新的空項目
  2. 添加骨股的UIViewController作爲根查看
  3. 設置一個計時器,打印出的根視圖控制器的幀的寬度和高度
  4. 運行您的應用程序,並將其旋轉四周。這裏是我的代碼,我與測試:
 
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
{ 
    self.window = [[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]]; 
    self.window.rootViewController = [[UIViewController alloc] init]; 

    NSLog(@"%fx%f", self.window.rootViewController.view.frame.size.width, self.window.rootViewController.view.frame.size.height); 

    // Add a label to confirm orientation 
    UILabel *orientationLabel = [[UILabel alloc] initWithFrame:CGRectMake(10,10,100,30)]; 
    orientationLabel.text = @"Top Left"; 
    [self.window.rootViewController.view addSubview: orientationLabel]; 

    [NSTimer scheduledTimerWithTimeInterval:.3 target:self selector:@selector(testScale) userInfo:nil repeats:YES]; 

    self.window.backgroundColor = [UIColor whiteColor]; 
    [self.window makeKeyAndVisible]; 
    return YES; 
} 
 
- (void) testScale { 
    NSLog(@"%fx%f", self.window.rootViewController.view.frame.size.width, self.window.rootViewController.view.frame.size.height); 
} 
+0

重複http://stackoverflow.com/questions/2686882/incorrect-frame-window-size-after-re-orientation-in-iphone和http:/ /堆棧溢出。com/questions/11150495/ios-uiview-get-frame-after-rotation – Bot

回答

0

不是一個錯誤。你想要的是使用bounds而不是frame

想想這樣。當您旋轉設備時,設備不會更改其屏幕尺寸。它保持不變,但觀點正在改變。所以這就是爲什麼你會想要使用界限。

+0

它似乎明確地抵消了Apple iOS 6文檔,它說「調整其根視圖控制器的框架」 – user441669

+0

@ user441669有許多重複的問題說出這件事。 – Bot

0

您可以使用狀態欄

[[UIApplication sharedApplication] statusBarOrientation] 

的狀態與if語句,你就可以知道,如果屏幕爲橫向或縱向

1

你嘗試把你的UIViewController內改爲UINavigationController?我有一個類似的問題,它修復了它。 UINavigationController類似乎處理比UIViewController更好的旋轉。

嘗試這樣:

UIViewController *myViewController = [[UIViewController alloc] init]; 
UINavigationController *myNavigationController = [[UINavigationController alloc] initWithRootViewController:myViewController]; 
self.window.rootViewController = myNavigationController; 
+0

謝謝,明天我會試試 – user441669

+1

我想謝謝你。我一直在尋找2天的在線,以查找是否有人可以解釋爲什麼我的5.1應用程序在6.1中完全崩潰。我在navigationBar和UIView之間得到了一個黑條,navigationBar沒有旋轉,而視圖的其餘部分沒有旋轉。這個簡單的神奇行:\t self.window.navigationController = self.navigationController;在AppDelegate爲我修復了它!再次,謝謝你 ! –

相關問題