Iphone UIView子视图不会在方向更改时自动调整大小

Iphone UIView子视图不会在方向更改时自动调整大小,iphone,uiview,interface-builder,subview,Iphone,Uiview,Interface Builder,Subview,在我的iPhone应用程序中,我有一个带有两个视图的视图控制器(基本上是前视图和后视图)。前视图是主UIView,后视图是次UIView,显示后视图时使用[self.view addSubview:backView]将其添加为子视图,隐藏后视图时使用[backView removeFromSuperview]将其添加为子视图。但是,当方向改变时,我有以下问题:主UIView(前视图)旋转&其所有元素的大小都正确调整,但次/子视图UIView(后视图)没有旋转&它的所有元素没有正确调整大小。有人对

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

如果我理解正确,在旋转时,“backView”已从其superview中删除,是吗?如果是,那就是问题的原因。autoresize属性确定视图相对于其superview的大小调整方式。如果没有superview,它将不会调整大小


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

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

我也有同样的问题,下面是我如何根据imaginaryboy的 建议(谢谢!)


将后视图添加到viewDidLoad的viewcontroller中,同时将其隐藏。需要时显示,然后再次隐藏。将backview的大小设置为UIViewAutoresizingFlexibleWidth in IB(或者我想我使用的代码是IB)

这不是同一个问题,但我在应用程序中添加2个子视图时发现了类似的问题:didFinishLaunchingWithOptions方法。由于您上面的引用使用的是[self.view addSubview:view],我理解这意味着self不是您的UIWindow。将其他视图控制器添加到应用程序代理窗口(UIWindow)时,第二个视图控制器将不会接收任何旋转事件,并且永远不会旋转。只有添加到UIWindow的第一个视图控制器将旋转。请参阅:我相信这也会影响在第一个视图之后添加的视图,其中第一个视图稍后将从superview中删除


我最终遵循了我在别处读到的建议,为每个方向使用单独的视图,从而消除了对调整行为大小的担忧。一如既往,YMMV.

或;如果要避免使用额外的控制器,可以通过在willRotateToInterfaceOrientation::中设置view.frame来实现相同的效果

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

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

虽然这感觉像一个黑客;很简单

不幸的是,即使backView也在superview中,这种情况也会发生。我刚刚尝试了你的建议,使用
[backView setHidden:YES]
,但也没有奏效。backView.autoresizesSubviews==YES吗?可能是因为它是默认的,但到目前为止,这是我能想到的唯一其他事情。是否有您可以发布的代码示例实际显示了错误的行为?