2010-08-25 44 views
2

在我的iPhone应用程序自动调整,我有两个观点(实际上是一个正面&后视图)一个视图控制器。前视图是主要的UIView,后视图是辅助UIView,在隐藏它时显示后面和[backView removeFromSuperview]时使用[self.view addSubview:backView]作为子视图添加。然而,当方向的变化,我有以下问题:主要的UIView(FrontView中)旋转&的所有元素调整得当,但二级/子视图的UIView(backView)不旋转&的所有元素不正常调整。有没有人有关于如何根据我在界面生成器中设置的规则正确地进行辅助UIView自动调整的建议?的UIView子视图不会对方向变化

回答

2

最后,我发现的解决方案只是简单地将我的UIViews分离成单独的UIViewControllers,并确保我希望能够旋转的任何视图只有一个UIView。

1

如果我理解正确的话,在“backView”旋转时已被删除,从它的上海华,是吗?如果是这样,那就是问题的原因。 autoresize属性确定视图相对于其超级视图的大小。如果它没有超级视图,它不会调整大小。

也许使用[backView setHidden:YES]而不是[backView removeFromSuperview]将足以满足您的需求。

+0

不幸的是,即使backView也处于超视图中,也会发生这种情况。而我刚刚尝试了使用'[backView setHidden:YES]'的建议',但它也没有做到这一点。 – Jason 2010-08-25 05:35:37

+0

是backView.autoresizesSubviews == YES?想必它是因为它是默认的,但到目前为止,这是我能想到的唯一的其他事情。 – imaginaryboy 2010-08-25 05:42:14

+0

是的,它等于是。 – Jason 2010-08-25 14:21:55

0

我有同样的问题,这是我如何固定它的基础上imaginaryboy的 建议(感谢!)

的backview添加到ViewController在viewDidLoad中,并把它隐藏在同一时间。在需要时显示,再次隐藏。将背视图的大小设置为IB中的UIViewAutoresizingFlexibleWidth(或者我猜,我使用了IB)

0

不是这是同样的问题,但是在我的应用程序中添加2个子视图时发现了类似的问题:didFinishLaunchingWithOptions方法。因为你上面的参考是使用[self.view addSubview:view],我会明白,这意味着自己不是你的UIWindow。将附加视图控制器添加到App Delegate窗口(UIWindow)时,第二个视图控制器将不会接收任何旋转事件,并且永远不会旋转。只有添加到UIWindow的第一个视图控制器才会旋转。请参阅:Technical Q&A QA1688我相信这也影响在第一个视图之后添加的视图,其中第一个视图稍后从超级视图中移除。

我结束了我读其他地方使用不同的视图对于每个方向,从而无需担心调整行为的建议如下。一如既往,YMMV。

0

或;如果你想避免额外的控制器,可以通过设置willRotateToInterfaceOrientation :: view.frame像这样

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

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

虽然感觉就像一个黑客达到相同的效果;这很简单。