我有一个在Interface Builder中创建并配置为根据方向调整大小的视图。如果在应用程序处于纵向模式时创建视图并将其添加到显示中,则一切都可以正常工作。然后我可以旋转设备/模拟器,视图调整大小如我所料。但是,如果在应用处于横向模式时添加视图,则无法正确调整大小。视图的创建和大小就像应用程序仍处于纵向模式一样。该视图添加了以下代码:
self.viewController = [[MyViewController alloc] initWithNibName:nibName bundle:bundle];
[self addSubview:self.viewController.view];
这里没有什么神奇的事情发生。此外,视图控制器指定:
- (BOOL) shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation
{
return YES;
}
同样,只要在纵向模式下添加视图,它就会按预期工作。我尝试了几种不同的方法,包括在视图上手动设置autoresizingMask属性,调用setNeedsLayout,以及调用layoutIfNeeded,但似乎没有任何工作。我能够手动设置框架的宽度和高度以强制视图调整大小,但这会破坏视图的动态特性。例如,如果我手动设置宽度,则不会调整高度,因为内容不会重新布局。
有什么想法吗?
答案 0 :(得分:5)
只需设置您的子视图框架
即可self.viewController.view.frame = self.view.bounds;
答案 1 :(得分:0)
快速回答这里虽然我猜你已经解决了这个问题:) 原因是当您创建并添加视图时,它将使用纵向框架从笔尖加载。加载时,它不会自动旋转,因为此时应用程序无法知道您的意思是旋转。
一些选项包括:
拥有纵向和横向笔尖,并在添加视图时根据当前方向从相应的笔尖加载。
在加载后调整代码,如前所述。
可能还有一个强制重新布局的选项,听起来就像是你所追求的那样。
HTH
答案 2 :(得分:0)
我刚刚在几乎相同的问题上发布了答案。查看UIView addsubview after orientation change
答案 3 :(得分:0)
这将会发生,您只需将一个视图控制器的视图添加到其他视图控制器上。这是一种不好的做法,可能导致内部不一致异常。请参阅WWDC的Container Api vedio。对于这样的东西,使用了api。
但是你仍然希望这样做。添加视图后,需要在self.viewController上调用shouldAutorotateToInterfaceOrientation