iPhone 5上的UIView高度不对

时间:2012-09-21 21:32:22

标签: objective-c xcode uiview cgrect

我正在使用UIPickerView在我的应用上迁移我的应用。在viewDidLoad方法中,我创建了选择器,并将它的y原点设置为self.view.frame.size.height,以便它在屏幕外。然后我会在需要时将其移动。

在iPhone 5 self.view.frame.size.height仍然返回480但UIView正确填充屏幕。

我甚至尝试使用CGRectGetHeight(self.view.bounds)认为它可能会返回不同的东西......没有骰子。关于为什么会发生这种情况的任何想法。

4 个答案:

答案 0 :(得分:22)

这是因为在viewWillAppear: (BOOL) animated方法之前将使用您在视图笔尖中选择的大小。然后它将采取正确的大小。

但是,您可以使用以下代码来调整viewDidLoad之后的正确大小:

CGSize viewSize = [[UIScreen mainScreen] bounds].size;
viewSize = CGSizeMake(viewSize.width, viewSize.height - STATUS_BAR_HEIGHT);

STATUS_BAR_HEIGHT是20,但这取决于您的应用。您可能需要也可能不需要添加该行。

修改

使用mainScreen边界的问题在于框架在方向更改时不会发生变化。这就是它的设计方式。您可以使用以下方法解决这个问题:

    CGSize viewSize = [[UIScreen mainScreen] bounds].size;

    if(UIInterfaceOrientationIsLandscape(CURRENT_ORIENTATION)){
        viewSize = CGSizeMake(viewSize.height, viewSize.width - STATUS_BAR_HEIGHT);

    } else {
        viewSize = CGSizeMake(viewSize.width, viewSize.height - STATUS_BAR_HEIGHT);
    }

CURRENT_ORIENTATION[[UIApplication sharedApplication] statusBarOrientation];

答案 1 :(得分:18)

我一直在处理同样的问题。我尝试在- (void)viewDidLoad中获取视图框,但发现在- (void)viewWillAppear:(BOOL)animated被调用之前它没有更新。

所以尝试在- (void)viewWillAppear:(BOOL)animated中获取视图框架,你应该没问题。

答案 2 :(得分:3)

看起来iOS检测到应用程序是专为在iPhone 5中检测到捆绑中的Default-568h@2x.png图像而设计的。 How to develop or migrate apps for iPhone 5 screen resolution?有一个完整的答案,概述了整个过程。

答案 3 :(得分:1)

我发现了这个问题。我的笔尖必须设置为“iPhone 5全屏”(我认为这就是所谓的)。我猜它会从笔尖加载视图大小而不考虑autoResizeMask。

当IB中的视图大小设置为“大小:无”时,视图的大小不正确。它必须设置为“尺寸:Retina 4全屏”。奇怪。