2013-11-26 78 views
0

使用具有自動佈局和約束的Storyboard編輯器,我創建了一個具有UIViewController(1)的層次結構,其中有一個Container(2),其中依次包含一個Container UIViewcontroller(3)被嵌入。在容器中獲取視圖的實際大小

將嵌入式UIViewController(3)的背景顏色設置爲與(1)不同的顏色,這表明約束條件正在執行:從視覺上看,它看起來和我在故事板編輯器模擬器和我的設備上。我試圖訪問UIViewControllers(3)視圖框架和界限,兩個都有不正確的結果,他們似乎返回相同的大小作爲大小的UIViewController(3)視圖框架和邊界,主機UIViewController(1),這顯然是錯誤的,因爲一旦確實嵌入其他。

我也嘗試訪問self.parentViewController.view框架和邊界,但這些都返回0.0。

在嵌入式的UIViewController(3):

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 
    NSLog(@"Size: %f x %f", self.view.frame.size.width, self.view.frame.size.height); 
    NSLog(@"Origin: %f x %f", self.view.frame.origin.x, self.view.frame.origin.y); 
} 

我期望的此輸出被什麼東西其類似於,至少在高寬比,所述的UIViewController(3)的實際可見的大小,但它實際上等於我從UIViewController(1)中得到相同的代碼,這顯然不是真的,因爲它們的大小不一樣。

+0

如果我正確地讀出,容器視圖保留了視圖控制器?這顯然聽起來不對。 [見這裏](https://developer.apple.com/library/ios/documentation/general/conceptual/devpedia-cocoacore/MVC.html) – John

+1

約翰,但這正是一個容器是「定義的區域一個可以包含視圖控制器的視圖控制器「 – DusteD

+1

這就是我爲什麼沒有正確閱讀的原因:儘管我仍然認爲它打破了Cocoa自己的規則。噢,無視 – John

回答

0

我通常爲視圖做出了一個出口,這使得獲取參數變得更容易,例如在你的界面,使一個IBOutlet,並連接到您的視圖

IBOutlet UIView *outletYourView 

何地,只要你需要的信息,請致電

outletYourView.frame.size.width; 
outletYourView.frame.size.height; 

+0

但是我可以連接到哪個視圖?父視圖? – DusteD

+0

您應該連接您實際想要獲取有關信息的視圖。的UIViewController(3)。根據你是否將你的IBOutlet放在.h或.m中,你當然必須使用'self.outletYourView.frame.size.width;'和'self.outletYourView.frame.size.height;' –

相關問題