0

目前,这就是正在发生的事情。如果我处于纵向模式,并且我展示了一个新的 modalViewController,然后旋转到横向,那么 autoResizing 可以完美地工作并且一切看起来都很棒。但是,如果我在风景中,并且我展示了一个新的 modalViewController,autoResizing 不起作用,一切看起来都很时髦。谁能想到为什么会发生这种情况的任何可能的想法?我绝望了,我什么都试过了。

也许解决这个问题的一种方法是弄清楚当我处于纵向和横向时系统调用了哪些代码。如果我的 modalView 以横向显示,也许我可以调用那个确切的代码。我试过 layoutIfNeeded 和 setNeedsDisplay 但他们什么也没做。我也尝试将 contentMode 设置为 redraw-没有帮助。

我的 viewDidLoad 中有这个用于模态视图

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

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

4

1 回答 1

2

UIViewAutoResizingMasks 就是我们所说的“struts”和“springs”。考虑一下:你有一个大正方形,里面有一个小正方形。为了使该正方形完全居中,您必须从大正方形的每个内侧边缘设置一个固定宽度,以对其进行约束。这些是支柱。

另一方面,弹簧的工作方式更像 UIView 在旋转期间所做的工作。假设我们的视图必须保持在屏幕底部,居中对齐。我们想让它的顶部弹簧保持灵活,这样当视图从 460 像素旋转到 320 像素时,它相对于屏幕现在更改的尺寸保持相同的位置。

牢记这一点,当视图以纵向加载时(就像所有 UIViewController 一样),但实际方向是横向时,视图可能会变得“混乱”并保持一种混乱的混合方向类型视图。如果您绝对必须(我不能强调这是最后的手段),请事先强制更改方向,请使用 iOS 5.x 的 +attemptRotationToDeviceOrientarion

于 2012-04-13T04:42:45.397 回答