13

我正在一次又一次地迁移我的应用程序,我使用UIPickerView. 在 viewDidLoad 方法中,我创建了选取器并将它的 y 原点设置为self.view.frame.size.height使其不在屏幕上。然后我只是在需要时将其向上移动。

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

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

4

4 回答 4

22

那是因为您在视图的笔尖中选择的大小将被使用 untilviewWillAppear: (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];

于 2013-01-14T16:23:19.237 回答
18

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

所以试着把视图框放进去- (void)viewWillAppear:(BOOL)animated,你应该没事的。

于 2012-09-28T09:09:21.487 回答
3

在您的捆绑包中检测到 Default-568h@2x.png 图像后,iOS 似乎检测到该应用程序是为 iPhone 5 设计的。如何为 iPhone 5 屏幕分辨率开发或迁移应用程序?有一个完整的答案,概述了整个过程。

于 2012-10-03T21:19:15.380 回答
1

我发现了这个问题。我的笔尖必须设置为“iPhone 5 全屏”(我想这就是它的名称)。我猜它从笔尖加载视图大小并且没有考虑 autoResizeMask。

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

于 2012-09-24T16:25:41.017 回答