2012-10-18 92 views
0

我正在使用iOS 4.3。在UIViewController的生命週期中確定UIView的實際大小

我有一個UIViewController的視圖,只有一個UIToolbar和覆蓋視圖的其餘部分的子視圖。主要的UIView有彈簧和支柱,使它符合任何形狀,子視圖也一樣。默認情況下,xib處於縱向。

我把這個UIViewController放到我的UISplitViewController的右邊。在展示這個視圖控制器之前,我的iPad處於橫向取向,並始終保持橫向方向...所以要清楚,我不會改變方向。

xib是768w和1004h,所以我的子視圖是768w和960h。

-viewDidLoad我的子視圖是768x960。

-viewWillAppear我的子視圖是768x960。

-viewDidAppear我的子視圖是768x960。

但是當我真的在iPad上看到它時,UISplitViewController的右側是704px寬(因爲它應該是這樣),我的視圖和子視圖都可驗證地只有704px寬。

但是,在代碼或View Controller生命週期中,我無法查詢self.view或我的子視圖,看到寬度爲704px。

我需要根據整體視圖的大小進行一些更改,因爲我的子視圖是UIScrollView,我想根據我的self.view的實際大小更改scrollView.contentSize。

在View Controller生命週期中,我必須得到一些真實的視圖大小。我試過了framebounds,但他們都顯示768x906。

NSLog(@"scroll view frame=%@ bounds=%@", NSStringFromCGRect(self.scrollView.frame), NSStringFromCGRect(self.scrollView.bounds)); 

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

UIViewController *detailVC = [self.splitViewController.viewControllers objectAtIndex:1]; 
NSLog(@"splitview frame=%@ bounds=%@", NSStringFromCGRect(detailVC.view.frame), NSStringFromCGRect(detailVC.view.bounds)); 
+0

添加一個觸發記錄視圖大小的操作的按鈕。點擊按鈕時是否正確? –

+0

是的。在視圖真正可見之後,我點擊一個按鈕,這是正確的。 –

+0

我無法在iOS 5或iOS 6下的模擬器上重現它。微小的測試項目在這裏:https://github.com/mayoff/stackoverflow-12946064該框架在'viewDidAppear:'中是正確的。 –

回答

0

你應該利用的UIViewController方法viewWillLayoutSubviews的。這是更新滾動視圖的最佳位置。

請記住,您的視圖控制器將以縱向開始。在某個時候,它會旋轉到風景。出於調試目的,您可能希望覆蓋willRotateToInterfaceOrientation:duration:didRotateFromInterfaceOrientation:方法。

+0

對不起,我忘了提及我需要iOS4以及viewWillLayoutSubviews在iOS4中不存在。 –