添加子视图时,如果应用处于横向模式,视图不会resize

我有一个在Interface Builder中创build的视图,并configuration为根据方向resize。 如果在应用程序处于纵向模式时创build视图并将其添加到显示器,则一切正常。 然后,我可以旋转设备/模拟器和视图的大小,我所期望的。 但是,如果在横向模式下添加视图,则不会正确resize。 该视图的创build和大小就好像应用程序仍处于纵向模式一样。 该视图添加了以下代码:

self.viewController = [[MyViewController alloc] initWithNibName:nibName bundle:bundle]; [self addSubview:self.viewController.view]; 

这里没什么神奇的事情发生 另外,视图控制器指定:

 - (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation { return YES; } 

同样,只要在纵向模式下添加视图,它就会按预期工作。 我已经尝试了几个不同的东西,包括在视图上手动设置autoresizingMask属性,调用setNeedsLayout,并调用layoutIfNeeded,但似乎没有任何工作。 我能够手动设置框架的宽度和高度来强制视图的大小,但是这打破了视图的dynamic特性。 例如,如果我手动设置宽度高度不调整作为内容不重新布局。

有任何想法吗?

只需像这样设置你的子视图框架

 self.viewController.view.frame = self.view.bounds; 

虽然我猜你已经解决了这个问题,但这里的答案很简单:)原因是因为当你创build和添加视图的时候,这个视图是用纵向框架从nib中加载的。 加载时,它不会自动旋转,因为在这一点上,应用程序无法知道你的意思是要旋转。

一些选项包括:

  1. 有一个肖像和一个风景笔尖,并根据当前的方向加载视图时从适当的笔尖加载。

  2. 在加载之后按照以前的方法调整代码。

也许还有一个select是强制重播,这听起来就像是你以后的样子。

HTH

我刚刚在一个几乎相同的问题上发布了一个答案。 方向更改后检查UIView addsubview

这将发生,你只是将一个视图控制器的视图添加到其他视图控制器。 这是一个不好的做法,可能导致Internalinconsistency例外。 请参阅WWDC的Container Apivideo。 对于这样的东西,使用了遏制API。

但是你仍然想这样做。 添加视图后,您需要在self.viewController上调用shouldAutorotateToInterfaceOrientation