UIVIew在Storyboard中的大小调整与NIB的区别。

问题描述 投票:1回答:2

社区。有一些奇怪的UIView调整大小的事情,我不能理解。

比方说,我们有一个简单的Main.storyboard的单视图应用程序。RedView. 它的默认大小为600x600。而且所有的选项都是默认设置的。我没有改变任何东西。

现在,我在创建BlueView.xib时使用了 BlueView而且它的大小和选项与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

现在,当我在iPhone5模拟器上启动应用程序时,RedView变成了320*568,而BlueView变成了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}}

所以我的问题是:为什么在story中创建的RedView会变成320*568,而蓝景会变成600*600,在屏幕上看起来也不一样。

  1. 所以我的问题是:为什么在storyboard中创建的RedView会自动调整大小?我可以理解,为什么蓝色视图是600*600,但为什么红色会根据屏幕大小调整?谁告诉它这样做的?

  2. 在XIB中创建视图和在storyboard中创建视图的区别是什么?与调整视图大小有关,而不是其他。 为什么storyboard能调整视图大小,而.XIB不能?

我的项目是在Xcode 6中创建的,目标是8.0,使用的是...XIB。AutolayoutSize Classes 是启用。

ios objective-c iphone xcode uiview
2个回答
1
投票

这样一个老问题,但还是有人可能不太理解这样的行为,就像我第一次面对这样的问题。

UIViewController 在storyboard中,有一个选项 "Resize View From NIB"UIView xib中的选项没有。默认情况下,这个选项是开启的,这使得视图控制器的视图在加载时被调整为屏幕大小,甚至在视图被添加到视图层次结构之前。


0
投票

我想这是因为尺寸类的原因,根据苹果的说法 文件

人们通常希望在所有设备上以任何方向使用自己喜爱的应用程序。在iOS 8及以后的版本中,你使用大小类和自动布局来帮助你满足这一期望,定义屏幕、视图控制器和视图的布局在显示环境变化时应该如何适应。

所以当你在iPhone55上测试时,你的redView这是storyboard有 wAnyhAny 调整自己的大小,而你添加为子视图的蓝色视图则保持不变。现在你没有使用任何常量来指定它的宽度或高度,所以它仍然是600x600。

编辑这个 不如

© www.soinside.com 2019 - 2024. All rights reserved.