UIView autoResizing有时会起作用

时间:2012-04-13 04:26:12

标签: iphone objective-c ios

目前,这是正在发生的事情。如果我处于纵向模式,并且我呈现了一个新的modalViewController,然后旋转到横向,则autoResizing工作完美,一切看起来都很棒。但是,如果我在横向,并且我提出了一个新的modalViewController,autoResizing不起作用,一切看起来都很时髦。任何人都可以想到为什么会发生这种情况的任何可能的想法?我很绝望,我已经尝试了一切。

也许解决这个问题的一种方法是弄清楚当我在画像中时系统会调用哪些代码,然后我会去景观。如果我的modalView以横向呈现,也许我可以调用那个确切的代码。我尝试过layoutIfNeeded和setNeedsDisplay但他们什么也没做。我也尝试将contentMode设置为重绘 - 没有帮助。

我在viewDidLoad中有模态视图

if(UIInterfaceOrientationIsLandscape(self.interfaceOrientation))
{
    NSLog(@"is landscape, width:%f", self.view.frame.size.width);
}

并且这输出320,即使我在风景中,它应该是480。

1 个答案:

答案 0 :(得分:2)

UIViewAutoResizingMasks是我们所说的'struts'和'spring'。考虑一下:你有一个大方形,里面有一个小方块。为了使该正方形保持完美居中,您必须从大正方形的每个内边缘设置固定宽度,以便约束它。这些都是支柱。

另一方面,弹簧的工作更像是UIView在旋转过程中所做的工作。假设我们的视图必须保持在屏幕的底部,在中心对齐。我们希望保持它的顶部弹簧灵活,以便当视图从460像素旋转到320像素时,它保持相对于屏幕现在改变尺寸的相同位置。

记住这一点,当一个视图以纵向加载时(如同所有UIViewControllers一样),但实际的方向是横向的,视图可能会“混淆”并保持一种混乱的混合方向类型视图。如果你绝对必须(我不能强调这是最后的手段 - 这是什么)预先强制改变方向,使用iOS 5.x的+ attemptRotationToDeviceOrientarion