2012-12-16 51 views
2

工作這是很奇怪的。我有一個包含三個圖像的滾動視圖,用戶滑動以查看下一個圖像。不過,我希望第一個屏幕從中間圖像開始。簡單;我將使用setContentOffset,一切都會好的。的iOS setContentOffset不是在iPad

代碼工作在iPhone模擬器,而不是在iPad模擬器(或設備!)

CGRect screen = [[UIScreen mainScreen] bounds]; 
CGFloat height = CGRectGetHeight(screen); 
CGFloat width = CGRectGetWidth(screen); 

CGPoint rightOffset = CGPointMake(width, 0); 
[scrollView setContentOffset:rightOffset animated:YES]; 

一切只是滾動視圖之前設置添加(事實上,我們可以做到這一點後,滾動型是添加了相同的結果)。

寬度在iPhone上返回768上ipad和320。

這是一個錯誤? Xcode的4.4.1和iOS 6

編輯:

看起來這是與創建順序做;移動到viewWillAppear而不是viewDidLoad,並顯然在iphone和ipad上工作。只是不一致是非常令人驚訝的......

+0

是個問題仍處於打開狀態? –

回答

8

你不應該在viewDidLoad中初始化與UI幾何相關的東西,因爲你的視圖的幾何圖形沒有在這一點上設置,結果將是不可預知的。

正如你已經發現,viewWillAppear中是做這些事情,在這一點上的幾何形狀被設置成獲取和設置幾何圖形相關的屬性是有意義的正確位置。

viewDidAppear。

更新(iOS6的)

當iOS6的使用自動佈局,框架沒有被設置,直到子視圖已被佈置。在這些條件下獲取幀數據的正確位置是viewController方法-viewDidLayoutSubviews。

這之後 -viewWillAppear稱爲。但要小心 - 它們並不總是被稱爲一起。例如,-viewWDidLayoutSubviews在旋轉後調用,-viewWillAppear不是。 -viewWillAppear在每次視圖變爲可見視圖時調用*,-viewDidLayoutSubviews不一定(只有當我們的視圖需要中繼時)。

(*除非應用爲背景資料,並正在成爲前臺的應用程序,然後-viewWillAppear不叫)

+0

感謝您的回答。這個問題主要集中在爲什麼這可以在iphone上運行而不是在ipad上運行;如果有人知道爲什麼這樣也會很有趣! – stevenpcurtis

+0

我有同樣的問題,但與iOS 7 http://stackoverflow.com/questions/27250010/view-open-in-iphone-5s-and-5c-ios-7-1-like-iphone-4s-screen –

相關問題