2015-08-28 65 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