簡體   English   中英

UIVIew 在 Storyboard 中調整大小和 NIB 差異

[英]UIVIew resizing in Storyboard and NIB difference

社區。 有一些奇怪的 UIView 調整大小的事情,我無法理解。

假設我們有一個帶有 Main.storyboard 的簡單單視圖應用程序。 在故事板中,我正在創建RedView 它的默認大小為 600x600。 並且所有選項都是默認設置的。 我不會改變任何東西。

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

RedView 包含 BlueView 作為一個孩子,如下所示:

@implementation RedViewController
{
    BlueViewController *_blueViewController;
}

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

@end

現在,當我在 iPhone 5 Simulator 上啟動應用程序時,RedView 變為 320 * 568,Blue 視圖變為 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 會自動調整大小? 我可以理解,為什么藍色視圖是 600*600,但為什么紅色會根據屏幕大小進行調整? 誰告訴它這樣做的?

  2. 在 XIB 中創建視圖和在故事板中創建視圖之間的區別與調整視圖大小有關,而不是其他任何東西。 為什么故事板會調整其視圖的大小,而 .XIB 不會?

我的項目是在 Xcode 6 中創建的,目標是 8.0,啟用了AutolayoutSize Classes

這么老的問題,但仍然有人可能不太理解這種行為,就像我第一次面對它時一樣。

故事板中的UIViewController有選項"Resize View From NIB" ,而 xib 中的UIView沒有。 默認情況下,此選項處於打開狀態,這會使視圖控制器的視圖在加載時調整為屏幕大小,甚至在將視圖添加到視圖層次結構之前也是如此。

我認為這是因為 Size Classes 根據蘋果文檔

人們通常希望在他們的所有設備上以任何方向使用他們最喜歡的應用程序。 在 iOS 8 及更高版本中,您使用 size classes 和 Auto Layout 來幫助您通過定義屏幕、視圖控制器和視圖的布局在顯示環境發生變化時應如何適應來滿足這一期望。

因此,當您在 iPhone55 上對其進行測試時,您作為故事板的redView具有wAnyhAny調整自身大小,而您添加為 subView remians 的藍色視圖相同。 現在你還沒有使用任何 constarint 來指定它的寬度或高度 si 它仍然是 600x600

編輯可能會更好

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM