UIVIew在Storyboard和NIB中调整大小

时间:2015-08-28 08:51:21

标签: ios objective-c iphone xcode uiview

社区。有一些奇怪的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模拟器上启动应用程序时,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会自动调整?我可以理解,为什么蓝色视图是600 * 600,但为什么Red调整到屏幕尺寸?谁告诉它这样做?

  2. 在XIB和故事板中创建视图与调整视图大小有什么区别,而不是其他任何内容。为什么storyboard会调整视图大小,而.XIB不会?

  3. 我的项目在Xcode 6中创建,目标为8.0,启用了使用AutolayoutSize Classes

2 个答案:

答案 0 :(得分:1)

这是一个古老的问题,但是仍然有人可能不太了解这种行为,就像我第一次面对它时一样。

故事板中的

UIViewController具有选项"Resize View From NIB",而xib中的UIView没有选项。默认情况下,此选项处于启用状态,即使在将视图添加到视图层次结构之前,也可以在加载时将视图控制器的视图调整为屏幕大小。

答案 1 :(得分:0)

我认为这是因为大小类根据apple docs

  

人们通常希望在所有设备和任何方向上使用自己喜欢的应用。在iOS 8及更高版本中,您可以使用大小类和自动布局通过定义在显示环境发生变化时屏幕,视图控制器和视图的布局应如何适应来帮助您满足此期望。

因此,当您在iPhone55上测试时,您的redView(故事板) wAnyhAny 会自行调整大小,而蓝色视图则会添加为subView remians。现在你还没有使用任何constarint来指定它的宽度或高度,它仍然是600x600

修改 This可能会更好