2011-03-03 96 views
18

我在iPad應用程序中使用了splitView。詳細視圖中有2個子視圖,根據etail視圖邊界繪製自己。 問題在於,即使在ipad處於橫向模式時,他們也總是將自己吸引到(1024,768)中。SplitView詳細視圖返回錯誤的視圖框?

順便說一句 - 如果我打電話然後在肖像模式,然後旋轉ipad他們做規模(706,768)。

我已經檢查了詳細視圖幀和界限,因爲它創建(在視圖中沒有負載方法),並且在這兩種情況下,我得到這樣的:

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

在調試窗口我得到:

2011-03-03 10:58:19.376 English Club[63347:207] screen frame = {{0, 0}, {768, 1024}} 
2011-03-03 10:58:19.382 English Club[63347:207] screen bounds = {{0, 0}, {768, 1024}} 

我找不到問題出在哪裏。誰能幫我?

感謝您的任何幫助。

+0

我也注意到這個奇怪的問題。我會建議向蘋果提交一份錯誤報告 - 這就是我所做的。 http://bugreporter.apple.com – Jasarien 2011-03-03 09:59:48

+2

蘋果回答了這個bug提交嗎?順便說一句,你如何將這些子視圖添加到主視圖?你是否正確設置了它們的autoresize屬性?你能向我們展示更多的代碼來深入瞭解你的問題嗎?謝謝 – marzapower 2011-06-07 07:34:16

+0

那麼,你在這裏究竟想要做什麼?你想設置詳細視圖的大小。或內部細節視圖中的視圖。您可以在詳細信息視圖中設置視圖的框架大小,但不能設置詳細信息視圖的大小,因爲根據splitviewcontroller視圖的基本大小將保持標準。如果你有不同的問題,請讓我知道。 – AppAspect 2011-06-20 17:34:38

回答

6

viewDidLoad該視圖不應該有其實際大小。這是由佈局方法稍後設置的。但是這不應該阻止你:)你如何設置你的自動識別面具?如果你設置正確,一切都應該沒問題。

+0

謝謝,我會再次檢查它。 – shannoga 2012-01-13 07:32:21

1

是如果你已經設置會自動調整大小屬性應該是確定..

您可以通過筆尖或代碼

self.view.autoresizingMask = UIViewAutoresizingFlexibleWidth|UIViewAutoresizingFlexibleHeight; 

歡呼設置它們...

+0

謝謝,我會嘗試 – shannoga 2011-12-12 08:03:17

2

我目前正在寫一UISplitViewController應用程序,並失望地發現改變細節或主視圖的大小是被禁止的。它完全負責這些子幀的大小。

與UINavigationController和UITabBarController類似,UISplitViewController是一個'容器'視圖控制器,它將其子視圖變形以適合其用途。

函數self debugDumpTheFrames打印出uisplitviewcontroller的幀,它是兩個子幀。我打印的splitViewController的viewDidLoad幀,並設置一個計時器2秒後調用此函數的第二時間(在此期間,我什麼都不做):

[self debugDumpTheFrames]; 
NSTimer* timer = [NSTimer scheduledTimerWithTimeInterval:2.0f target:self selector:@selector(debugDumpTheFrames) userInfo:nil repeats:NO]; 

如果我們看一下輸出,我們可以看到,有時在viewdidload之後,UISplitViewController改變了它的子視圖的框架。

size of splitviewcontrollers view frame {{0, 0}, {748, 1024}} 
size of splitviewcontrollers detail view frame {{0, 0}, {768, 1024}} 
size of splitviewcontrollers master view frame {{0, 0}, {768, 1024}} 

size of splitviewcontrollers view frame {{0, 0}, {748, 1024}} 
size of splitviewcontrollers detail view frame {{321, 0}, {703, 748}} 
size of splitviewcontrollers master view frame {{0, 0}, {320, 748}} 

到底在哪它這樣做大小調整我不確定;但uisplitviewcontroller是這些框架的老闆,他們是私人物業,所以觸摸他們是從商店拒絕的理由。

3

在viewWillAppear中執行操作而不是viewDidLoad。

4

,如果你等待 - (無效)viewDidLayoutSubviews 它將有合適的尺寸

0

如果你確實需要得到在viewDidLoad中正確的寬度,你可以訪問拆分視圖控制器和獲得的寬度詳細視圖控制器。

E.g.在斯威夫特:

func getDetailViewSize() -> CGSize { 
    var detailViewController: UIViewController 
    if (self.splitViewController?.viewControllers.count > 1) { 
     detailViewController = self.splitViewController?.viewControllers[1] as! UIViewController 
    } else { 
     detailViewController = self.splitViewController?.viewControllers[0] as! UIViewController 
    } 
    return detailViewController.view.frame.size 
}