2015-01-09 104 views
0

我的根視圖控制器是一個選項卡視圖控制器。我的應用程序只是橫向模式。它在項目設置和故事板中爲包括根在內的每個VC設置。在viewDidLoad中,我有:Xcode 6 iOS 7查看大小

NSLog(@"width of view in didappear:%f",self.view.frame.size.width); 

和viewDidAppear中的相同代碼。在iOS 8的viewDidLoad中,該行輸出480.在iOs 7中,它打印出320(縱向模式下的屏幕寬度),但在viewDidAppear中打印出480,這是正確的。是的,對於那些總是在尋找「精確」細節的人來說,它是同樣的設備。

爲什麼視圖仍然在縱向viewDidLoad在ios7而不是在ios8?可以做什麼?我在viewDidLoad中設置了我的整個視圖,因爲我只需要執行一次,因此無法將其遷移到viewDidAppear或其他位置。

回答

1

這是iOS 7和8之間的奇怪區別,如果是這樣的話。我猜這是相同的設備類型但物理上不同的項目?或者你真的在同一個設備上運行iOS 7 & 8?

所以你理論上仍然有設置差異。即iOS 7設備鎖定在肖像等

如果設置是真的如你所說,一個布爾屬性將幫助你在viewDidAppear運行。我剛剛提供了一個如何在這裏完成的例子:https://stackoverflow.com/a/27867549/1111233

+0

通過相同的設備,我的意思是在模擬器中,我嘗試使用ios7和8的iPhone 4s。我嘗試使用邊界作爲其他人指出,它沒有工作,仍然是同樣的問題。所以我將你的答案作爲一個bandaid來實現。 – SAR392 2015-01-09 19:49:11

0

基本上,viewDidLoad在UIElements被加載並放置在屏幕上之前運行,所以這就是爲什麼你得到錯誤的大小。就iOS7和iOS8的區別而言,我猜蘋果稍微改變了內部,但無論如何,你絕對應該將你的圖形代碼移到viewWillAppear。圖形被加載時viewWillAppear中運行和工作方式相同viewDidLoad中

0

使用邊界

CGRect rect = [[UIScreen mainScreen] bounds]; 

NSLog(@"width of view in didappear:%f",rect.size.width); 
0

幀是相關的父視圖。最上面的視圖是UIWindow,它在iOS 8中成爲旋轉依賴。因此,橫向框架和邊界因此在iOS 7中會有所不同,但在iOS 8中也是如此。如果您使用邊界而不是框架,則應該給出兩個iOS版本的相同結果,因爲對象未旋轉某些數字的度數。