2015-08-28 61 views
1

社區。有一些奇怪的UIView調整大小的事情,我無法理解。UIVIew在Storyboard和NIB區別中調整大小

比方說,我們有簡單的單視圖應用程序與Main.storyboard。 在故事板我創建RedView。它有默認大小600x600。所有選項都是默認設置的。我沒有改變任何東西。

現在,我創建了帶有BlueView的BlueView.xib,它與RedView具有相同的大小和選項。另外,我正在創建BlueViewControler類,並將其設置爲BlueView.xib中的所有者。 BlueViewControler是空的。

RedView包括藍景作爲這樣的孩子:

@implementation RedViewController 
{ 
    BlueViewController *_blueViewController; 
} 

- (void)viewDidLoad { 
    [super viewDidLoad]; 
    _blueViewController = [[BlueViewController alloc] initWithNibName:@"BlueView" bundle:nil]; 
    [self.view addSubview:_blueViewController.view]; 
} 

@end 

而現在,當我發起對iPhone 5的模擬器應用程序,RedView變成320 * 568,藍角度的600 * 600

2015-08-28 13:32:17.937 TestViewSize[3087:77218] RedView frame = {{0, 0}, {320, 568}} 
2015-08-28 13:32:17.938 TestViewSize[3087:77218] BlueView frame = {{0, 0}, {600, 600}} 

在屏幕上,它們看起來也不一樣。 所以我的問題是:

  1. 爲什麼RedView,在故事板創建,autoresizes?我可以理解,爲什麼藍色視圖是600 * 600,但爲什麼紅色調整爲屏幕大小?誰告訴它這樣做?

  2. 在XIB中創建視圖和故事板與調整視圖有關,而不是其他任何事情。爲什麼故事板改變其視圖,.XIB不?

我的項目創建在Xcode 6,目標是8.0,使用AutolayoutSize Classes被啓用。

+0

u必須重寫任何的'初始化方法BlueViewController'and設置框當u用筆尖創造 – Mukesh

+0

@muku,我知道,我該如何處理這個問題,我對**感興趣爲什麼**會發生這種情況? – Akira

回答

0

我認爲那是因爲...尺寸等級的根據蘋果docs

人們通常希望使用他們的所有設備,並在任何方位自己喜愛的應用程序。在iOS 8及更高版本中,您可以使用尺寸類別和自動佈局,通過定義在顯示環境發生變化時屏幕布局,視圖控制器和視圖應該如何調整,從而幫助您達到期望。

所以當你測試它iPhone55你redView這是故事板具有wAnyhAny自身的大小,而在其中添加爲子視圖藍色視圖remians相同。現在你還沒有使用任何constarint指定它的寬度或高度對,它仍然爲600x600

編輯 This可能會更好

+0

但我的XIB文件也有** wAnyhAny **,那麼爲什麼它不以同樣的方式工作? 另外,不可能將約束添加到XIB的頂級視圖(引腳菜單只是空的)。我**也沒有**添加任何約束故事板,也。所以這些視圖都處於相同的情況,除了它們是以不同的方式創建的。 – Akira

+0

@Akira您將xib添加爲另一個的子視圖。如果你希望它們在相同的條件下,那麼你應該嘗試使用兩個VC的故事板 – Misha

+0

我可以直接將xib視圖添加到keyWindow,效果將是相同的:xib視圖仍然保持600 * 600。 我不需要它們處於相同的狀態,我需要知道,爲什麼storyboard會調整它的視圖,而xib不會。 – Akira