2013-10-21 26 views
2
- (void)viewDidLayoutSubviews { 
    [super viewDidLayoutSubviews]; 
    NSLog(@"viewDidLayoutSubviews view.height: %f", self.view.frame.size.height); 
} 

在上面,view.height總是 1024,不管設備是什麼方位,即使旋轉設備會導致viewDidLayoutSubviews被調用,它仍然會輸出1024如何在viewDidLayoutSubviews中獲得正確的視圖高度?

然而,視圖呈現精細。我錯過了什麼?

+0

你認爲高度是多少? –

+0

你如何得到view.height?你有UIView類別嗎?哪個視圖/視圖控制器是這樣的?這是你的根視圖控制器嗎? –

+0

@SimonGoldeen對不起,忘了解決。它是根據框架定義的。是的,它是根視圖控制器。 – devios1

回答

5

當iOS執行自動旋轉時,它不會更改根視圖控制器視圖的frame屬性。它所做的是應用變換併爲變換變化設置動畫。要查看視圖的「實際」大小,請檢查bounds屬性,而不是frame屬性。

引述transform財產Apple's documentation

警告:如果此屬性不是恆等變換,框架屬性的值是不確定的,因此應被忽略。

+0

謝謝!這似乎是一個非常奇怪的設計選擇。我是否認爲這只是*根視圖控制器上的情況? – devios1

+1

@chaiguy如果您對某個視圖應用了轉換,則會發生同樣的情況。其框架將不再必然反映其大小或位置。關於蘋果爲什麼這樣做,這是因爲旋轉動畫是通過動畫變換變化來實現的(或者我假設)。 –

0

我認爲是iOS8更新的時候了。在iOS8上:

  • UIScreen現在接口取向:
  • [UIScreen邊界現在接口爲本
  • [UIScreen applicationFrame]現在接口爲本
  • 狀態欄框通知是接口爲本
  • 鍵盤幀通知是面向接口的
相關問題