UIView子视图不会自动调整方向更改

时间:2010-08-25 05:16:51

标签: iphone uiview interface-builder subview

在我的iPhone应用程序中,我有一个带两个视图的视图控制器(基本上是前视图和后视图)。前视图是主UIView,后视图是辅助UIView,在显示背面时使用[self.view addSubview:backView]添加为子视图,隐藏它时使用[backView removeFromSuperview]。但是,当方向改变时,我有以下问题:主UIView(frontView)旋转&它的所有元素都正确调整大小,但是辅助/子视图UIView(backView)不会旋转&它的所有元素都没有正确调整大小。有没有人根据我在Interface Builder中设置的规则有关于如何使辅助UIView正确自动调整的建议?

5 个答案:

答案 0 :(得分:2)

最后,我找到的解决方案只是将我的UIViews分离成单独的UIViewControllers,并确保我想要旋转的任何视图只有一个UIView。

答案 1 :(得分:1)

如果我理解正确,在轮换时'backView'已经从它的超视图中移除了,是吗?如果是这样,那就是问题的原因。 autoresize属性确定视图相对于其超级视图的大小调整方式。如果它没有超级视图,则不会调整大小。

也许使用[backView setHidden:YES]代替[backView removeFromSuperview]就足以满足您的需求。

答案 2 :(得分:0)

我有同样的问题,这是我如何基于imaginaryboy修复它 建议(谢谢!)

将backview添加到viewDidLoad的viewcontroller并同时隐藏它。需要时显示,再次隐藏。将后视图的大小调整为IB中的UIViewAutoresizingFlexibleWidth(或者我猜的代码,我使用了IB)

答案 3 :(得分:0)

这不是同一个问题,但在我的应用程序中添加2个子视图时发现了类似的问题:didFinishLaunchingWithOptions方法。由于您上面的参考是使用[self.view addSubview: view ],我理解这意味着self不是您的UIWindow。向App Delegate窗口(UIWindow)添加其他视图控制器时,第二个视图控制器将不会接收任何旋转事件,也不会旋转。只有添加到UIWindow的第一个视图控制器才会旋转。请参阅:Technical Q&A QA1688我认为这也会影响第一个视图后添加的视图,其中第一个视图稍后会从超级视图中删除。

我最终遵循了我在其他地方读到的建议,为每个方向使用单独的视图,从而无需担心调整行为大小。一如既往,YMMV。

答案 4 :(得分:0)

或者;如果你想避免使用额外的控制器,你可以通过在willRotateToInterfaceOrientation ::中设置view.frame来达到同样的效果

    if(UIInterfaceOrientationIsLandscape([[UIApplication sharedApplication] statusBarOrientation])) ;//set stubborn view.frame for landscape orientation

    else ; //set stubborn view.frame for portrait orientation

虽然感觉像是黑客;这很简单。