添加子视图时,如果应用处于横向模式,视图不会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中加载的。 加载时,它不会自动旋转,因为在这一点上,应用程序无法知道你的意思是要旋转。
一些选项包括:
-
有一个肖像和一个风景笔尖,并根据当前的方向加载视图时从适当的笔尖加载。
-
在加载之后按照以前的方法调整代码。
也许还有一个select是强制重播,这听起来就像是你以后的样子。
HTH
我刚刚在一个几乎相同的问题上发布了一个答案。 方向更改后检查UIView addsubview
这将发生,你只是将一个视图控制器的视图添加到其他视图控制器。 这是一个不好的做法,可能导致Internalinconsistency例外。 请参阅WWDC的Container Apivideo。 对于这样的东西,使用了遏制API。
但是你仍然想这样做。 添加视图后,您需要在self.viewController上调用shouldAutorotateToInterfaceOrientation